本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/113551411
前面已经分享四篇了,第一篇 、第二篇、第三篇、第四篇,继续;
接口自动化测试框架的 category,有兴趣,可以看看。
个人博客:https://blog.csdn.net/zyooooxie
需求
使用pytest 如何做测试用例的设计?
conftest.py
@pytest.fixture(scope='session')
def session_host():
warnings.simplefilter('ignore', ResourceWarning)
env = 'test'
s = LoginLogout(env=env)
req_session, req_host = s.login()
yield req_session, req_host
s.logout(req_session)
test_balance.py
gl_excel_data = ExcelConfig.read_excel(os.path.join(excel_dir, 'new1.xlsx'), sheet_index=0)
Log.info('excel读取数据:{}'.format(gl_excel_data))
excel_data = [g for g in gl_excel_data if g[9] == '' and g[10] == '']
Log.info('执行用例:{}'.format(excel_data))
# noinspection PyAttributeOutsideInit
class TestBalance(object):
def setup_class(self):
self.db, self.cur = CommonFun.connect_db(db_name='balance_db')
def teardown_class(self):
CommonFun.disconnect_db(self.db, self.cur)
@pytest.mark.parametrize('data', excel_data)
def test_b_1(self, session_host, data):
Log.info(data)
session, host = session_host
data_feature, data_story, data_title, data_url, data_method, data_req_data, data_res_data, data_remark, data_description, data_setup, data_teardown, data_sql, data_need_s_t = data
allure.dynamic.feature(data_feature)
allure.dynamic.story(data_story)
allure.dynamic.title(data_title)
allure.dynamic.description(data_description)
if isinstance(data_need_s_t, float):
if int(data_need_s_t) == 0:
Log.info('当前用例 不需要前置、后置')
setup_case, teardown_case = list(), list()
else:
raise Exception('前后置 传参不合法')
elif data_need_s_t == '':
Log.info('当前用例 不需要前置、后置')
setup_case, teardown_case = list(), list()
elif isinstance(eval(data_need_s_t), list):
setup_case, teardown_case = eval(data_need_s_t)
Log.info('当前用例需要前置:{}、后置:{}'.format(setup_case, teardown_case))
else:
raise Exception('前后置 传参不合法')
for s in setup_case:
set_up_case = [u for u in gl_excel_data if u[9] == s]
if len(set_up_case) != 1:
raise Exception('前置case 数据量不对: {}'.format(set_up_case))
feature, story, title, url, method, req_data, res_data, remark, description, setup, teardown, sql, need_s_t = set_up_case[0]
self.run_case(session, host, url, method, req_data, res_data, remark, sql, setup_teardown='setup')
self.run_case(session, host, data_url, data_method, data_req_data, data_res_data, data_remark, data_sql)
for t in teardown_case:
tear_down_case = [x for x in gl_excel_data if x[10] == t]
if len(tear_down_case) != 1:
raise Exception('后置case 数据量不对: {}'.format(tear_down_case))
feature, story, title, url, method, req_data, res_data, remark, description, setup, teardown, sql, need_s_t = tear_down_case[0]
self.run_case(session, host, url, method, req_data, res_data, remark, sql, setup_teardown='teardown')
def run_case(self, session, host, url, method, req_data, res_data, remark, sql, setup_teardown=None):
if setup_teardown == 'setup':
Log.info('前置 执行')
elif setup_teardown == 'teardown':
Log.info('后置 执行')
else:
Log.info('测试用例 run')
new_url = ''.join([host, url])
if remark != '': # 修改req_data
new_req_data = CommonFun.change_excel_paramsValue_new(remark, req_data)
else: # 不修改req_data
new_req_data = None if req_data == '' else json.loads(req_data)
new_res_data = CommonFun.change_excel_assertValue(res_data)
res = SessionSendReq(session=session).req(test_url=new_url, request_type=method, test_data=new_req_data)
# Log.info(dump.dump_all(res).decode('utf-8'))
if sql == '':
CommonFun.assert_fun(new_res_data, res)
else:
CommonFun.sql_assert_fun(res_data, sql, res, self.db, self.cur)
if __name__ == '__main__':
pytest.main(['-s', 'test_balance.py'])
这部分代码:
- pytest 识别 test_cases目录下的conftest.py;
- fixture的scope=‘session’,可以跨py文件;
- 参数化,用例执行;
这篇就主要这些内容;该系列第六篇 接口自动化框架之 allure生成报告
交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie