pytest之参数化

使用pytest.mark.parametrize进行参数化(pytest内置的装饰器)
其中get_test_data().getDatasFromSheet())是封装的读取excel的测试数据(也可以是其他类型的文件存储测试数据,只要能读出来就行)
参数'grade,expect'是将变量放在一个字符串里,如果是多个则用逗号隔开

class TestHomeIndex():
    @pytest.mark.parametrize('grade,expect', get_test_data().getDatasFromSheet())
    def test_001_home_index(self, http, get_data, grade,expect):#前置操作和输入参数
        '''测试首页不同年级'''
        logger.info(f"{grade}-=====-{expect}")
        # print("grade",grade,type(grade))
        uri = '/mall/app/home/index'
        payload = get_data.get('playload')
        payload['gradeId'] = str(grade)
        #print(payload,type(payload))
        headers = get_data.get('headers')
        headers['X-Grade'] = str(grade)
        #print(headers,type(headers))
        logger.info(headers)
        logger.info(payload)
        response = http.post(uri, data=payload, headers=headers)
        # print('用例中的url',response.url)
        logger.info(response.text)
        r = response.json()
        print(json.dumps(r, indent=4, ensure_ascii=False))
        # print(response.status_code)
        code = response.json()['code']
        # print(code)
        # print(response.json()['data']['public']['user_type'])
        assert response.status_code == 200, '请求返回非200'
        assert code == expect, '请求返回code非0'

利用fixture实现参数化,多个参数,会生成各参数笛卡尔积的测试用例,params是列表类型
request参数固定写法,通过request.param返回

user_name = ["admin","staff"]
user_pwd = ["123","456"]
@pytest.fixture(params=user_name)
def login_name(request):
  name = request.param
  return name

@pytest.fixture(params=user_pwd)
def login_pwd(request):
  pwd = request.param
  return pwd

def test_login(login_name,login_pwd):
  print(login_name,login_pwd)
  assert login_name == "admin"
  assert login_pwd == "123"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容