Pytest装饰器@pytest.mark.parametrize一键生成接口正交试验用例
?
我們?cè)谧鼋涌跍y(cè)試時(shí),有時(shí)會(huì)遇到涉及用例特別多的時(shí)候,每個(gè)用例都去手動(dòng)調(diào)一遍,很費(fèi)時(shí)費(fèi)力,也是不現(xiàn)實(shí)的,這篇文章我們就解決下這種費(fèi)時(shí)費(fèi)力的情況.
一、業(yè)務(wù)需求
某所大學(xué)通信系共2個(gè)班級(jí),剛考完某一門課程,想通過(guò)“性別”、“班級(jí)”和“成績(jī)”這三個(gè)查詢條件對(duì)通信系這門課程的成績(jī)分布,男女比例或班級(jí)比例進(jìn)行人員查詢:
根據(jù)“性別”=“男,女”進(jìn)行查詢
根據(jù)“班級(jí)”=“一班,二班”查詢
根據(jù)“成績(jī)”=“及格,不及格”查詢
按照傳統(tǒng)設(shè)計(jì)——全部測(cè)試
分析上述測(cè)試需求,有3個(gè)被測(cè)元素,被測(cè)元素我們稱為因素,每個(gè)因素有兩個(gè)取值,我們稱之為水平值,所以全部測(cè)試用例個(gè)數(shù)是2*2*2=8,參見(jiàn)下表
| 序號(hào) | 性別 | 班級(jí) | 成績(jī) |
| 1 | 女 | 1班 | 及格 |
| 2 | 女 | 1班 | 不及格 |
| 3 | 女 | 2班 | 及格 |
| 4 | 女 | 2班 | 不及格 |
| 5 | 男 | 1班 | 及格 |
| 6 | 男 | 1班 | 不及格 |
| 7 | 男 | 2班 | 及格 |
| 8 | 男 | 2班 | 不及格 |
如果有10個(gè)因素,每個(gè)因素有2個(gè)水平取值,那么我們需要組合2*2*2*2*2*2*2*2*2*2=1024個(gè)用例,這樣去實(shí)現(xiàn)是不可能的,大家是如何處理這種情況的?
二、利用pytest裝飾器@pytest.mark.parametrize實(shí)現(xiàn)快速生成所有正交測(cè)試用例可以解決這種問(wèn)題,我們看到腳本生成的用例和上面手動(dòng)列的用例完全一樣,這樣我們就可以根據(jù)需求中因數(shù)和因數(shù)水平值,快速生成所有正交測(cè)試用例
@pytest.mark.parametrize('因數(shù)1字段',['因數(shù)1的水平值1','因數(shù)1的水平值2'])
@pytest.mark.parametrize('因數(shù)2字段',['因數(shù)2的水平值1','因數(shù)2的水平值2'])
……
這樣有幾個(gè)因素就寫(xiě)幾個(gè)裝飾器,然后每個(gè)裝飾器里分別放入對(duì)應(yīng)因數(shù)的水平值,組成不同的測(cè)試用例data,一次調(diào)用可出所有測(cè)試用例結(jié)果,可實(shí)現(xiàn)快速接口測(cè)試,是不是很方便呢。
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?
?
總結(jié)
以上是生活随笔為你收集整理的Pytest装饰器@pytest.mark.parametrize一键生成接口正交试验用例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OpenCV 3.1 imwrite()
- 下一篇: Jmeter性能测试工具Timer定时器