zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    第三周:Filter 拦截用户请求部分代码分析
    Story Of Web Background
    XML的前景
    XML的工作原理和过程
    第二周:XML的定义和用途
    企业级应用与互联网应用的区别
    第一周:JavaEE——课程目标
    Java 容器小结
    使用java显示所有操作系统环境变量
    迭代器和Interator的常见用法
  • 原文地址:https://www.cnblogs.com/gsxl/p/13233902.html
Copyright © 2011-2022 走看看