pytest_用例a失败,跳过测试用例b和c并标记失败xfail
前言
当用例a失败的时候,如果用例b和用例c都是依赖于第一个用例的结果,那可以直接跳过用例b和c的测试,直接给他标记失败xfail
用到的场景,登录是第一个用例,登录之后的操作b是第二个用例,登录之后操作c是第三个用例,很明显三个用例都会走到登录。
如果登录都失败了,那后面2个用例就没测试必要了,直接跳过,并且标记为失败用例,这样可以节省用例时间。
用例设计
1.pytest里面用xfail标记用例为失败的用例,可以直接跳过。实现基本思路
- 把登录写为前置操作
- 对登录的账户和密码参数化,参数用canshu = [{"user":"amdin", "psw":"111"}]表示
- 多个用例放到一个Test_xx的class里
- test_01,test_02, test_03全部调用fixture里面的login功能
- test_01测试登录用例
- test_02和test_03执行前用if判断登录的结果,登录失败就执行,pytest.xfail("登录不成功, 标记为xfail"
test_login.py
import pytest
import requests s = requests.session()
canshu = [{'user':'xxxx',
'paw':111111,
'uri':'xxxxxxxxxx'}] @pytest.fixture(scope='module') def login(request):
user = request.param['user']
paw = request.param['paw']
uri = request.param['uri'] url = uri + "/global/do-login.action"
body = {
"loginName": "%s" % user,
"password": "%s" % paw,
"pcCodeForFocusMedia": 0
}
a = s.post(url, data=body, verify=False)
data = a.json()
print(data['status'])
if data['status'] == 202:
return True
else:
return False
test_parametrize.py
import pytest, requests, urllib3
from s14.pytest_learn import test_login
urllib3.disable_warnings() canshu = test_login.canshu
login = test_login.login tenantId = xxx # 租户ID
encryptionKey = "xxxxxxxxx" # 保持登陆的key
passport_id = xxxxx # 跟据账号进行填写,同一个账户下的多个租户,passport.id不用更改
uri = 'xxxx'
user = 'xxxx' @pytest.mark.parametrize('login', canshu, indirect=True)
class Test_xxxx(): s = requests.session()
def test_01(self, login):
'''登陆'''
result = login
print("用例1: %s" % result)
assert result == True def test_02(self, login):
result = login
print("用例2: %s" % result)
url1 = uri + "/global/login-entry.action"
body1 = {
"tenantId": "%s" % tenantId,
"passport.id": passport_id,
"encryptionKey": "%s" % encryptionKey,
"loginName": "%s" % user
}
b = self.s.post(url1, data=body1, verify=False)
data = b.json()
a = data['status']
if not result:
pytest.xfail("登陆不成功,标记为xfail")
else:
print("用例2运行结果为 :True , data['status']状态为:%s" % a)
assert data['status'] == 0 if __name__ == '__main__':
pytest.main(['-s', 'test_parametrize.py'])
上面传的登录参数是登录成功的案例,两个用例全部通过
============================= test session starts =============================
platform win32 -- Python 3.6.2, pytest-3.7.4, py-1.6.0, pluggy-0.7.1
rootdir: D:\python_auto\s14\pytest_learn, inifile:
collected 2 items test_parametrize.py 202
用例1: True
.用例2: True
用例2运行结果为 :True , data['status']状态为:0
. ========================== 2 passed in 0.55 seconds ===========================
标记为xfail
1.再看看登录失败情况的用例,修改登录的参数
import pytest
import requests s = requests.session()
canshu = [{'user':'xxxxx',
'paw':'',
'uri':'xxxxxx'}] @pytest.fixture(scope='module') def login(request):
user = request.param['user']
paw = request.param['paw']
uri = request.param['uri'] url = uri + "/global/do-login.action"
body = {
"loginName": "%s" % user,
"password": "%s" % paw,
"pcCodeForFocusMedia": 0
}
a = s.post(url, data=body, verify=False)
data = a.json()
print(data['status'])
if data['status'] == 202:
return True
else:
return False
test_parametrize.py
import pytest, requests, urllib3
from s14.pytest_learn import test_login
urllib3.disable_warnings() canshu = test_login.canshu
login = test_login.login tenantId = xxx # 租户ID
encryptionKey = "xxxxxxxxx" # 保持登陆的key
passport_id = xxxxx # 跟据账号进行填写,同一个账户下的多个租户,passport.id不用更改
uri = 'xxxx'
user = 'xxxx' @pytest.mark.parametrize('login', canshu, indirect=True)
class Test_xxxx(): s = requests.session()
def test_01(self, login):
'''登陆'''
result = login
print("用例1: %s" % result)
assert result == True def test_02(self, login):
result = login
print("用例2: %s" % result)
url1 = uri + "/global/login-entry.action"
body1 = {
"tenantId": "%s" % tenantId,
"passport.id": passport_id,
"encryptionKey": "%s" % encryptionKey,
"loginName": "%s" % user
}
b = self.s.post(url1, data=body1, verify=False)
data = b.json()
a = data['status']
if not result:
pytest.xfail("登陆不成功,标记为xfail")
else:
print("用例2运行结果为 :True , data['status']状态为:%s" % a)
assert data['status'] == 0 if __name__ == '__main__':
pytest.main(['-s', 'test_parametrize.py'])
运行结果
============================= test session starts =============================
platform win32 -- Python 3.6.2, pytest-3.7.4, py-1.6.0, pluggy-0.7.1
rootdir: D:\python_auto\s14\pytest_learn, inifile:
collected 2 items test_parametrize.py 401
用例1: False
F用例2: False
x ================================== FAILURES ===================================
__________________________ Test_xxxx.test_01[login0] __________________________ self = <test_parametrize.Test_xxxx object at 0x03A4C730>, login = False def test_01(self, login):
'''登陆'''
result = login
print("用例1: %s" % result)
> assert result == True
E assert False == True test_parametrize.py:22: AssertionError
===================== 1 failed, 1 xfailed in 0.51 seconds =====================
从结果可以看出用例1失败了,用例2和3没执行,直接标记为xfail了
作者:含笑半步颠√
博客链接:https://www.cnblogs.com/lixy-88428977
声明:本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。如果您认为还不错,欢迎转载。转载与引用请注明作者及出处。
pytest_用例a失败,跳过测试用例b和c并标记失败xfail的更多相关文章
- pytest十:用例 a 失败,跳过测试用例 b 和 c 并标记失败 xfail
当用例 a 失败的时候,如果用例 b 和用例 c 都是依赖于第一个用例的结果,那可以直接跳过用例 b 和 c 的测试,直接给他标记失败 xfail用到的场景,登录是第一个用例,登录之后的操作 b 是第 ...
- pytest文档16-用例a失败,跳过测试用例b和c并标记失败xfail
前言 当用例a失败的时候,如果用例b和用例c都是依赖于第一个用例的结果,那可以直接跳过用例b和c的测试,直接给他标记失败xfail 用到的场景,登录是第一个用例,登录之后的操作b是第二个用例,登录之后 ...
- 用例a失败,跳过测试用例b和c并标记失败xfail
前言 当用例a失败的时候,如果用例b和用例c都是依赖于第一个用例的结果,那可以直接跳过用例b和c的测试,直接给他标记失败xfail用到的场景,登录是第一个用例,登录之后的操作b是第二个用例,登录之后操 ...
- 【pytest官方文档】解读Skipping test functions,跳过测试用例详解
有时候,为了满足某些场景的需要,我们知道有些测试函数在这时候肯定不能执行,或者执行了也会失败.那么我们 可以选择去跳过这个测试函数,这样也就不会影响整体的测试函数运行效果,不至于在你运行的众多绿色通过 ...
- MOOC(7)- case依赖、读取json配置文件进行多个接口请求-跳过测试用例(6)
初始化.跳过测试用例 # test_class_6.py import unittest from mock import mock from day_20200208_mooc.base.inter ...
- 『德不孤』Pytest框架 — 4、Pytest跳过测试用例
目录 1.无条件跳过skip 2.有条件跳过skipif 3.练习 自动化测试执行过程中,我们常常出现这种情况:因为功能阻塞,未实现或者环境有问题等等原因,一些用例执行不了, 如果我们注释掉或删除掉这 ...
- Pytest_用例分组(6)
用例分组 pytest进行分组测试的方法是使用装饰器 @pytest.mark.标记名称,被标记为相同名称的用例可以看做为同一个组. 分组用例的运行方式是在执行命令中追加 -m "标记名称& ...
- VMWare虚拟机提示:锁定文件失败,打不开磁盘...模块"Disk"启动失败的解决办法
我出现该问题的原因: 昨天电脑一下子卡死,于是我就重启了电脑,重启之后我没有打开VMware虚拟机,结果第二天一上班打开VMware就发现出现了“锁定文件失败,打不开磁盘......模块"D ...
- 测者的测试技术手册:Junit执行单元测试用例成功,mvn test却失败的问题和解决方法
今天遇见了一个奇怪的问题,在IDE中run unit test,全部cases都成功了,但是后来通过mvn test运行case确保错了.在寻求原因的同时也找到了对应的解决方法. Run Unit T ...
随机推荐
- 洛谷1169 [ZJOI2007] 棋盘制作
题目链接 题意概述:给出由0 1构成的矩阵,求没有0 1 相邻的最大子矩阵的最大子正方形. 解题思路:设f[i][j]表示i j向上能到哪,l[i][j] r[i][j]表示向左/右,转移时分开计算矩 ...
- SQL进阶-索引设置&sql优化
一.索引设置 1.索引的设置原则 经常出现在WHERE条件.关联条件中的字段作为索引字段: 在满足查询需求的前提下,应尽可能少的创建索引:(对于一个组合索引,可以满足以组合索引左边的一部分字段的查询需 ...
- linux实现pwd
版本1: 调用系统接口getcwd,实现路径打印. /*** ***文件名:1_mypwd.c ***描述:通过系统函数getcwd实现pwd命令 ***/ #include<stdio.h&g ...
- 调用Fluent进行多工况计算总结
算例来源:https://confluence.cornell.edu/display/SIMULATION/FLUENT+-+Turbulent+Pipe+Flow 有时候我们对同一模型进行多工况计 ...
- [Beta]Scrum Meeting#7
github 本次会议项目由PM召开,时间为5月12日晚上10点45分 时长15分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客整理文档 撰写博客整理文档 swoip 为适应新功能调整布局 ...
- Vue系列——如何运行一个Vue项目
声明 本文转自:如何运行一个Vue项目 正文 一开始很多刚入手vue.js的人,会扒GitHub上的开源项目,但是发现不知如何运行GitHub上的开源项目,很尴尬.通过查阅网上教程,成功搭建好项目环境 ...
- MongoDB笔记: 分片集群
MongoDB分片集群由三个模块组成 shard: 分片(或者分区)模块, 每个分片分别存储一部分数据, 从MongoDB 3.6开始, 分片必须是replica set(副本集) mongos: m ...
- 什么时候会进行 SpringMVC重定向保存参数(FlashMap)?
SpringMVC重定向保存参数(FlashMap):两种情况会保存参数: 1. 当前视图为RedirectView,也即是说当前请求为重定向请求. org.springframe ...
- 如何防止Hangfire重复作业在连续执行30分钟后重新启动(How to prevent a Hangfire recurring job from restarting after 30 minutes of continuous execution)
var options = new SqlServerStorageOptions { InvisibilityTimeout = TimeSpan .FromMinutes(30)//默认值}; G ...
- Python3基础 __file__ 查询模块的完整路径
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...