Pytest装饰器@pytest.mark.parametrize一键生成接口正交试验用例
?
我們在做接口測試時,有時會遇到涉及用例特別多的時候,每個用例都去手動調一遍,很費時費力,也是不現實的,這篇文章我們就解決下這種費時費力的情況.
一、業務需求
某所大學通信系共2個班級,剛考完某一門課程,想通過“性別”、“班級”和“成績”這三個查詢條件對通信系這門課程的成績分布,男女比例或班級比例進行人員查詢:
根據“性別”=“男,女”進行查詢
根據“班級”=“一班,二班”查詢
根據“成績”=“及格,不及格”查詢
按照傳統設計——全部測試
分析上述測試需求,有3個被測元素,被測元素我們稱為因素,每個因素有兩個取值,我們稱之為水平值,所以全部測試用例個數是2*2*2=8,參見下表
| 序號 | 性別 | 班級 | 成績 |
| 1 | 女 | 1班 | 及格 |
| 2 | 女 | 1班 | 不及格 |
| 3 | 女 | 2班 | 及格 |
| 4 | 女 | 2班 | 不及格 |
| 5 | 男 | 1班 | 及格 |
| 6 | 男 | 1班 | 不及格 |
| 7 | 男 | 2班 | 及格 |
| 8 | 男 | 2班 | 不及格 |
如果有10個因素,每個因素有2個水平取值,那么我們需要組合2*2*2*2*2*2*2*2*2*2=1024個用例,這樣去實現是不可能的,大家是如何處理這種情況的?
二、利用pytest裝飾器@pytest.mark.parametrize實現快速生成所有正交測試用例可以解決這種問題,我們看到腳本生成的用例和上面手動列的用例完全一樣,這樣我們就可以根據需求中因數和因數水平值,快速生成所有正交測試用例
@pytest.mark.parametrize('因數1字段',['因數1的水平值1','因數1的水平值2'])
@pytest.mark.parametrize('因數2字段',['因數2的水平值1','因數2的水平值2'])
……
這樣有幾個因素就寫幾個裝飾器,然后每個裝飾器里分別放入對應因數的水平值,組成不同的測試用例data,一次調用可出所有測試用例結果,可實現快速接口測試,是不是很方便呢。
import pytestclass Test(object):@pytest.mark.parametrize('sex',['男','女'])@pytest.mark.parametrize('classes ', ['一班','二班'])@pytest.mark.parametrize('score', ['及格', '不及格'])def test(self,sex,classes,score):data={'sex':'','classes':'','score':''}data['sex']=sexdata['classes'] = classesdata['score'] = scoreprint(data) if __name__=="__main__":pytest.main(["-s","test02.py"])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test02.py ============================= test session starts ============================= platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0 rootdir: C:\Users\wangli\PycharmProjects\Test\test plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0 collected 8 itemstest02.py {'classes': '一班', 'score': '及格', 'sex': '男'} .{'classes': '一班', 'score': '及格', 'sex': '女'} .{'classes': '二班', 'score': '及格', 'sex': '男'} .{'classes': '二班', 'score': '及格', 'sex': '女'} .{'classes': '一班', 'score': '不及格', 'sex': '男'} .{'classes': '一班', 'score': '不及格', 'sex': '女'} .{'classes': '二班', 'score': '不及格', 'sex': '男'} .{'classes': '二班', 'score': '不及格', 'sex': '女'} .============================== 8 passed in 0.26s ==============================Process finished with exit code 0?
?
總結
以上是生活随笔為你收集整理的Pytest装饰器@pytest.mark.parametrize一键生成接口正交试验用例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV 3.1 imwrite()
- 下一篇: Jmeter性能测试工具Timer定时器