1.pytest excel数据驱动生成测试用例,一个表格中有多个sheet(一个sheet为一个test_suite),使用yield源源不断的生成Test类,同时测试用例里面得到的测试类对象要不同(相同的话会覆盖上一个对象),,自动loadexcel表格,多个excel文件使用循环即可
def create_case(test_suite: dict):
"""
接收从excel传来的多个测试套件的信息,并生成真正的测试用例
:param test_suite:
:return:
"""
for suite_name,case_dict in test_suite.items():
class Test:
@pytest.mark.parametrize("case",case_dict.items())
def test_(self,case):
name = case[0]
step_list = case[1]
print(f"{name=}")
print(f"{step_list=}")
yield Test
test_dir = Path(__file__).parent
file_list = list(test_dir.glob("test_*.xlsx"))
_case_count = 0
for file in file_list:
data = data_by_excel(file)
for case in create_case(data):
_case_count += 1
globals()[f"Test{_case_count}"] = case
2.pytest显示等待和隐式等待的区别
1)隐式等待是全局性等待,并且可以随时更改,仅仅针对 find_element 方法生效,当超时没
找到元素时报错是 no_such_element
2)显式等待是针对单一元素或者一组元素进行设置,针对元素属性进行超时设置,针对 iframe
的切换进行超时设置,针对 alert 切换进行超时设置,针对 window 切换进行超时设置,自定义
超时的条件,当超时没满足条件时报错是 timeoutexception
3.selenium三大组件
1)IDE:录制、自动生成测试用例
2)webdriver:执行测试用例
3)Grid:远程、分布式执行测试用例
4.pytest的ini文件中不能包含中文,如果包含中文将编码格式改成JBK
5.pytest.ini文件里设置改变发现用例规则时,指定用例文件夹(testpaths)的优先级最高(python_files,python_classes,python_functions)
6.pytest用例编辑分组用法
1)在pytest.ini文件里设置
markers =
smoke:冒烟测试
product_manage:商品管理
2)在方法名上添加装饰器
@pytest.mark.smoke
def test_api(self):
pass
@pytest.mark.product_manage
def test_api1(self):
pass
3)在pytest.ini添加运行参数
addopts = -m "smoke or product_manage"
7.json.loads()将字符串转化为字典,反序列化 json.dumps()字典转化为字符串,序列化
8.接口自动化时,接口参数导致接口名称样式改变问题:找到allure_pytest/listener.py修改96行
test_result.parameters.extend([Parameter(name=name, value=represent(value)) for name, value in params.items()])
test_result.parameters.extend([])
9.appium自动化测试时element.tag_name报错
logger.info(f"{loc}元素定位成功,{element.tag_name}({element.rect})")
原因:appium不支持element.tag_name
10.接口自动化为什么要封装统一请求
创建了一个session请求,如果想共用这个session就需要导包,导包的时候会将这个文件里的用例也导进来,就会出现用例重复执行的情况