一、分布式运行
这里分布式,是指起多个线程,听说使用到python协程的库,没有仔细研究。。。重点是我们能提升我们测试脚本运行的总体效率。
1、首先安装库:pip install pytest-xdist
了解 pytest-xdist 插件更多看这里:https://docs.pytest.org/en/3.0.1/xdist.html
用法:pytest -n2 既是起两个进程
2、测试脚本
from selenium import webdriver import time def test1(): driver = webdriver.Chrome() driver.get('https://www.cnblogs.com/gsxl/') print("get 广深小龙 博客园") print(driver.find_element_by_id("Header1_HeaderTitle").text) time.sleep(1) driver.quit() print("运行完毕,即将关闭...") def test2(): driver = webdriver.Chrome() driver.get('https://www.cnblogs.com/gsxl/') print("get 广深小龙 博客园") print(driver.find_element_by_id("Header1_HeaderTitle").text) time.sleep(1) driver.quit() print("运行完毕,即将关闭...") def test3(): driver = webdriver.Chrome() driver.get('https://www.cnblogs.com/gsxl/') print("get 广深小龙 博客园") print(driver.find_element_by_id("Header1_HeaderTitle").text) time.sleep(1) driver.quit() print("运行完毕,即将关闭...")
运行命令:pytest -n2 test.py
效果:直接两个线程跑前两条用例关闭后,再起一个线程跑最后一条用例。
二、自定义顺序执行用例
pytest-ordering 更多介绍:https://pytest-ordering.readthedocs.io/en/develop/
1、首先安装库:pip install pytest-ordering
2、测试代码:
import pytest def test_4(): print(44444) @pytest.mark.run(order=2) def test_1(): print(11111111111) @pytest.mark.run(order=1) def test_2(): print(22222) # @pytest.mark.run(order=3) def test_3(): print(33333333)
结果顺序为:test2 → test1 → test4 → test3
test2设置的是1顺序,test1设置的是2顺序,test4、test3没有设置顺序,便按代码的顺序,既会先运行test4。
三、前面二者结合能行吗?
我们直接来实践吧,GOGOGO~
测试代码:
from selenium import webdriver import time, pytest @pytest.mark.run(order=3) def test1(): driver = webdriver.Chrome() driver.get('https://www.cnblogs.com/gsxl/') print("get 广深小龙 博客园--首页") print(driver.find_element_by_id("Header1_HeaderTitle").text) time.sleep(3) driver.quit() print("运行完毕,即将关闭...") @pytest.mark.run(order=1) def test2(): driver = webdriver.Chrome() driver.get('https://www.cnblogs.com/gsxl/p/13233740.html') print("get 广深小龙 博客--docker-selenium") print(driver.find_element_by_id("Header1_HeaderTitle").text) time.sleep(3) driver.quit() print("运行完毕,即将关闭...") @pytest.mark.run(order=2) def test3(): driver = webdriver.Chrome() driver.get('https://www.cnblogs.com/gsxl/p/13193939.html') print("get 广深小龙 博客园--jenkins-allure") print(driver.find_element_by_id("Header1_HeaderTitle").text) time.sleep(1) driver.quit() print("运行完毕,即将关闭...")
结果:起两个进程先运行了test2和test3,最后运行test1
结论:多线程 + 顺序 运行用例,是有效果的。
关于 pytest.ini 简单使用介绍:
在项目根目录下创建 pytest.ini 文件,运行时会自带设置的参数,比如多线程 -n2,--alluredir path 等等
这样我们在终端输入的时候就不用每次都输入参数了,因为它会默认带上。
欢迎来大家QQ交流群一起学习:482713805