利用 configtest.py 定制自己的运行范围 并重跑失败的case

先来说一下conftest.py ,这个文件放在不同的路径下,pytest 会根据层级关系来确定其作用范围,官方建议放在项目根目录下,不宜路径太深。

pytest 在启动后会加载配置文件,例如 ini 文件,和这个 conftest.py。

pytest 命令行参数会被传递给 config变量,这是一个全局对象,类似的还有 request, session,items。可以参考 pytest官网的reference。

So,如果在命令行中给出 “--lf” ,那么这个值将会在 config.option.lf 属性被设置成bool True;如果在命令行中给出了特定的测试用例function,这个值将会在 config.args 列表中出现。这两点接下来会用到。

首先设计第一个,这个测试环境,是stage环境还是dev 环境,两者使用不用的测试数据,比如登录用户名,这个值在command line中设置

# content of project man.py
import pytest
if __name__ == ‘__main__‘:  pytest.main([‘-v‘,‘--envopt=stage‘])

# content of conftest.py

class CaseEnv():
    def __init__(self):
        self.TestURI = None
        self.AdminUser = None
        self.AdminUserPWD = None

def pytest_addoption(parser):
    # set testing environment to stage or devasis
    parser.addoption(
        "--envopt", action="store", default="stage", help="my option: stage or devasia"
    #将会在 config.option 中增加 devopt属性,默认值stage
    )

@pytest.fixture(scope=‘session‘)     #级别session可以被class级别的fixture使用
def xyyopt(request):
    # request is a pytest fixture,
    envused = request.config.getoption("--envopt")

    TestData = CaseEnv()
    if envused == ‘stage‘:
        TestData.TestURI = ‘https://app.net.cn‘
        TestData.AdminUser = ‘admin666‘
        TestData.AdminUserPWD = ‘password123‘
    else:
        print ‘Now is not stage environment !!! ‘

    return TestData    #在其他使用这个fixture的function中 通过 xyyopt.TestURI 就可以得到 webdriver初始化用的测试网址

在command line 中增加的option,需要送给一个地方接收它,它就是config对象。所以用到了 pytest_addoption(parser)这个hook。随后根据它来确定自定义fixture的返回值,以作后续使用。

接下来,又希望自定义哪些测试用例被执行。用到了 nodeid,它是一个测试function在pytest中的呈现方式,结构类似于这样 “Test_module.py::Test_class::test_function_1”;还用到了另一个hook,pytest_configure(config)。将这些用例 按照pytest的格式列在某一个配置文件中,修改这个列表就可以实现只跑这些用例。

同样,修改conftest.py 文件:

def pytest_configure(config):

      casesids = MyCaseList.get(‘caseids‘)   # A list of cases ids I want to run  MyCaseList 是我的case 列表文件
      config.args = casesids       # add cases to config just like doing in commond line

这样,不需要修改command line,就可以划定case的范围,并且,会根据这个case 列表的索引顺序从【0】来执行。

  最后,还想要把fail的case再跑一遍,但是为来避免产生的 --junit-xml 结果会覆盖先前的记过,so,对于 --lf 的结果单独写到另一个 xml 中,目前的简单方式是

#content of project main
import pytest
if __name__ == ‘__main__‘:
    pytest.main([‘-v‘,‘--envopt=stage‘])
    pytest.main([‘-v‘,‘--lf‘])     #use it to run previous failed case

#modify conftest.py/pytest_configure(config)

def pytest_configure(config):
    ...
    ...
    ...
    if config.getoption(‘lf‘) is True:             # if command line have --lf option, save run last fail report to different xml file    config.option.xmlpath = ‘./report-stage-lf.xml‘
    else:
       config.option.xmlpath = ‘./report-stage.xml‘  # specify --junite-xml report file path

    ..
    ..
    ..

这样在对应路径下将会有两个测试结果xml文件:report-stage.xml,第一次运行自定义好的用例的结果;report-stage-lf.xml,存放了上一次fail的case第二次运行后的结果。写在不同xml文件中的原因是,第二次的--lf 运行会在原来的xml中覆盖结果。

config.option 的属性值在另一个地方记录了下来 https://www.cnblogs.com/xiaoyanxuzi/p/10510722.html

原文地址:https://www.cnblogs.com/xiaoyanxuzi/p/10518279.html

时间: 2024-08-30 18:30:53

利用 configtest.py 定制自己的运行范围 并重跑失败的case的相关文章

利用BusyBox ~私人定制 My LINUX~

前言 我在今天在这里跟大家详细地探讨一下Linux系统的定制过程和实现例如.用户能够远程登录:和Nginx能够稳定地运行在我们私人定制的LINUX系统上.一步一步从头开始定制属于我们自己的系统. 正文    首先我们先来简单的介绍一下我们这里定制属于自己的Linux系统的基本元素. 一个定制的linux内核+一个定制的busybox就可以定制一个小型的Linux操作系统了,安装Dropbear和Nginx,Linux的组成 部分包括内核空间和用户空间.而用户空间其实就是根文件系统.用户空间中又包

利用strace和perf分析MySQL运行

利用strace和perf分析MySQL运行 周万春 perf strace pstack pt-pmp 都是一类工具 [[email protected] ~]# perf top Samples: 330 of event 'cpu-clock', 4000 Hz, Event count (approx.): 42848685 lost: 0/0 drop: 0/0 Overhead Shared Object Symbol 21.09% [kernel] [k] vmw_cmdbuf_h

【AD】AD域环境下利用Supercrypt实现普通用户安装/运行/更新使用管理权限的方法

企业管理中一般的计算机用户只被授予普通用户的权限,当有时候有的应用程序一定要本地管理员的权限才能正常运行.这时候企业的网络管理员的一般做法是1.将用户提升为本地管理员.2.使用RUN AS并使用ADMINISTRATOR用户运行程序.第一种对计算机有各种风险,第二种做法需要暴露管理员用户的密码而且要每次输入.而Supercrypt可以完美解决上面的问题.Supercrypt可以将运行的程序及运行程序的用户名密码保存为.LSC文件,而此文件是加密过的.通过 supercrypt /lscfile:

CentOS7+Python3.6利用web.py库进行微信公众平台服务器简易配置,token验证

1.安装配置Python CentOS7 自带 Python2.7, 我用的是Python3.6.5,需要CentOS7安装配置Python3并和Python2共存的,请看以下教程: CentOS7安装配置Python3.6.5 2.安装web.py pip install web.py 可以换国内源下载,速度比较快 3.安装libxml2, libxslt, lxml python yum install libxml2 yum install libxslt yum install lxml

python 利用 setup.py 手动安装django_chartit

手动安装django_chartit库 1 下载压缩包 2 解压到python安装目录下,文件夹名为django_chartit,并检查文件夹下是否有setup.py文件 3 在cmd中进入django_chartit文件夹下,cmd命令为 cd C:\Python27\django_chartit 4 输入python setup.py build并执行 5 输入python setup.py install执行,不出意外安装成功 6 import chartit不报错即安装成功 下章将如何运

利用位操作符加速程序的运行

众所周知,位操作是cpu里面最快速的操作之一.但是以前在程序中,一直没有使用,可能是害怕异或是别的什么原因.可是最近在写一个小的爬虫,但是却需要爬取百万级数据,这时候想到了位操作符. 先来2个程序对比一下: 程序1: 1 #coding:utf-8 2 3 import time 4 import datetime 5 6 pagesNum = 0 7 8 def getLinks(): 9 global pagesNum 10 for i in range(0,0xfffffff): 11 p

利用xcode怎么编辑html并且运行html

1.xcode创建一个空的文件如图所示 2.点击下一步取名字为---.html 点击确定使用这种格式保存 3.保存过之后就是一个html的文件,单击/双击这个文件,如图所示 4.删除所有之后就可以开始编写html了<!DOCTYPE html>... 5.编写完之后保存,xcode中加载这样的代码运行即可在模拟器上看到对应的html网页了 1 UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.frame]; 2 we

利用CSS3选择器定制checkbox和radio

之前在一个项目中需要定制checkbox,于是呼用图片模拟了一下,之后发现个更好用的方法(*因为兼容问题 在移动开发中用用就好) 效果: 1 2 3 4 5 6 7 实现代码: <style type="text/css"> * { padding:0; margin:0;} #text { width:260px; margin:0 0 0 20px; padding:6px; border:4px solid #FC9; font-size:12px; color:wh

利用SSH桥接访问服务器的Docker运行的MySql服务

前情提要 docker的运用越来广泛,许多IT公司都已经将自己的服务跑在Docker上面.在安全性方面又做了一层防护.比如:跑在Docker上的Mysql不做外网端口映射,只能在linux服务器上或进入docker访问mysql,这样对开发者来说是有些不方便的. 那么,其实这种情况,我们也是有办法可以做到在本地连接docker里面的MySql数据库的. 环境: Linux服务器:centos 7.7 服务器IP:192.168.1.5 容器:docker 实例IP:172.17.0.2 数据库: