pytest-4-分布式运行与自定义顺序执行用例

一、分布式运行

这里分布式,是指起多个线程,听说使用到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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姚二龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值