一、pytest测试框架简介
pytest是Python中的单元测试框架
1、pytest特点:
。容易上手,入门简单,丰富的文档资料,文档中有很多实例可进行参考
。支持参数化
。执行用例过程中可以进行标记跳过用例,标记失败用例
。支持重复执行失败的用例
。具有很多的第三方插件,并且可以实现自定义扩展
。便捷管理用例,方便和持续集成工具相互结合,便于生成测试报告
2、测试框架的核心作用
。找到测试用例
。执行测试用例
。管理测试用例
。断言测试用例
。生成测试报告
二、pytest常用插件
pytest 测试框架本身
pytest-html 生成html测试报告
pytest-xdist 多线程运行
pytest-ordering 控制用例的执行顺序
pytest-rerunfailures 控制失败用例重跑
allure-pytest 生成allure测试报告
pytest-base-url 管理基础路径
在项目中安装所有插件:
在项目的路径下, 新建一个requiremens.txt
写上所有插件的名字
在命令行安装命令:pip install-r requiremens.txt
三、pytest默认的测试用例执行规则
1、包名必须是以test开头或者test结尾
2、模块名必须是以test开头或者test结尾
3、用例名必须是以test开头或者test结尾
函数
方法 ---实例方法和类方法
举例如下:
简单使用:定义一个函数做用例去执行, 想要封装的话,放在一个类里边,作为类方法去使用。
四、pytest两种执行方式
1.通过命令行执行:pytest -vs
s:用例的输出信息可以在控制台显示 用例执行的步骤更加详细;
-k 用例名 :有多个用例时,指定该用例执行,其他用例不执行。
2.通过主函数run.py运行(具体:项目下创建run.py 右键执行):
import pytest
if_name="_main_":
pytest.main()
五、常用装饰器
如果一个.py(也就是模块中)有多个测试用例,有不需要执行的用例或者执行顺序等,可使用装饰器。
5.1、pytest标记跳过测试用例
无条件跳过用例
有条件跳过用例
skipif 如果没有给条件,默认条件不满足的,直接跳过(不执行);如果给了条件,条件成立,则跳过(不执行),条件不成立,则不跳过(执行用例)
5.2、pytest控制测试用例的执行顺序
用例的执行默认顺序是按照包名,文件名以及函数名前后顺序执行的方式pytest提供了可以修改执行用例顺序的插件pytest-ordering
先执行order 为1、2、3的;然后执行没有定义的测试用例,从上到下依次执行。
5.3、pytest标记失败测试用例
标记预期会出现异常失败的测试用例,只有出现异常才符合预期,执行会出现XFAIL结果;不出现异常反而不对,执行会出现XPASS结果。
如果符合预期失败:
。XFAIL结果
标记失败--成功
如果不符合预期失败:
。XPASS结果
标记失败--失败
5.4、pytest标记参数化
对于相似的用例执行过程,但是使用的数据不一样,那么就可以使用参数化实现
参数的基本使用:
六、案例使用
标记参数化应用到项目实例中
import time import pytest from selenium import webdriver from selenium.webdriver.common.by import By
@pytest.mark.parametrize("username, password", [(1, 2), (3, 4)])
def test_login02(username, password):
driver = webdriver.Chrome() # 获取驱动
driver.get("https://。。。。。。。。/login") # 目标网站-网址-登录页面
driver.maximize_window() # 页面最大化
# 定位到【账号】元素
element1 = driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/div[1]/div/div[2]/div/div[2]/'
'form/div[1]/div/div/input')
element1.send_keys(username)
# 定位到【密码】元素
element2 = driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/div[1]/div/div[2]/div/div[2]/'
'form/div[2]/div/div/input')
element2.send_keys(password)
# 定位到【登录】元素
element3 = driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/div[1]/div/div[2]/div/div[2]/button')
element3.click()
time.sleep(5)
七、参数化一般会结合数据驱动进行自动化测试
所有数据的获取必须使用不同的方式去使用的。
数据驱动测试DDT:
- Data数据
- Driver驱动
- Tests用例
数据驱动测试的数据存储方式有很多种类型
- Text文本
- Csv文件 --最好用
- Excel文件
- Json文件
- Yaml文件
通过csv的数据存储方式读取数据:
1、在utilsCes .py中定义
# 实现数据驱动测试之读取csv文件数据符合参数化标准 def get_data(): data_list = [] c1 = csv.reader(open("666.csv")) print(c1) # c1存的是内存地址 print(type(c1)) for i in c1: # print(i) # 结果:一行数据就是一个列表 data_list.append(i) else: return data_list
2、在实际测试用例test_login.py中使用
import time import pytest from selenium import webdriver from selenium.webdriver.common.by import By from utilsCes import get_data
# @pytest.mark.parametrize("username, password", [(1, 2), (3, 4)]) @pytest.mark.parametrize("username, password", get_data()) def test_login02(username, password): driver = webdriver.Chrome() driver.get("https://uat.i-nursingcare.com:8443/manage/#/login") driver.maximize_window() # 账号 element1 = driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/div[1]/div/div[2]/div/div[2]/' 'form/div[1]/div/div/input') element1.send_keys(username) # 密码 element2 = driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/div[1]/div/div[2]/div/div[2]/' 'form/div[2]/div/div/input') element2.send_keys(password) # 登录 element3 = driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div/div[1]/div/div[2]/div/div[2]/button') element3.click() time.sleep(5)标签:测试用例,框架,driver,用例,pytest,测试,div,执行 From: https://blog.csdn.net/qq_38203986/article/details/136644656