iOS自动化探索(五)自动化测试框架pytest - Assert断言的使用
使用assert语句进行断言
pytest允许使用标准的python assert语法,用来校验expectation and value是否一致
代码演示:
def func():
return def test_func():
assert func() ==
执行结果:
(wda_python) bash-3.2$ pytest -q test_assert.py
F [%]
================================================================ FAILURES ================================================================
_______________________________________________________________ test_func ________________________________________________________________ def test_func():
> assert func() ==
E assert ==
E + where = func() test_assert.py:: AssertionError
failed in 0.07 seconds
(wda_python) bash-3.2$
同时支持在assert后面添加描述信息:
def func():
return def test_func():
assert func() == , 'Value was odd, should be even'
执行结果:
(wda_python) bash-3.2$ pytest -q test_assert.py
F [%]
================================================================ FAILURES ================================================================
_______________________________________________________________ test_func ________________________________________________________________ def test_func():
> assert func() == , 'Value was odd, should be even'
E AssertionError: Value was odd, should be even
E assert ==
E + where = func() test_assert.py:: AssertionError
failed in 0.07 seconds
(wda_python) bash-3.2$
预期异常的断言
pytest中使用with pytest.raises: 来断言预期异常
代码演示:
import pytest def func():
raise SystemExit(1) def test_func():
with pytest.raises(SystemExit):
func()
执行输出:
(wda_python) bash-3.2$ pytest -q test_sysexit.py
. [%]
passed in 0.04 seconds
(wda_python) bash-3.2$
还可以自定义错误描述:
import pytest def func():
raise SystemError("Exception 123 raised") def test_func():
with pytest.raises(SystemError, match=r'.* 123 .*'):
func()
输出:
(wda_python) bash-3.2$ pytest -q test_assert.py
. [%]
passed in 0.03 seconds
(wda_python) bash-3.2$
如果不匹配的话就会报错:
import pytest def func():
raise SystemError("Exception 12 raised") def test_func():
with pytest.raises(SystemError, match=r'.* 123 .*'):
func()
输出:
(wda_python) bash-3.2$ pytest -q test_assert.py
F [%]
================================================================ FAILURES ================================================================
_______________________________________________________________ test_func ________________________________________________________________ def test_func():
with pytest.raises(SystemError, match=r'.* 123 .*'):
> func()
E AssertionError: Pattern '.* 123 .*' not found in 'Exception 124 raised' test_assert.py:: AssertionError
failed in 0.07 seconds
(wda_python) bash-3.2$
断言上下文内容(变量)是否相等
实例代码:
def test_set_comparison():
set1 = set('')
set2 = set('')
assert set1 == set2
运行结果:
(wda_python) bash-3.2$ pytest -q test_assert.py
F [%]
================================================================ FAILURES ================================================================
__________________________________________________________ test_set_comparison ___________________________________________________________ def test_set_comparison():
set1 = set('')
set2 = set('')
> assert set1 == set2
E AssertionError: assert set(['', '', '', '']) == set(['', '', '', ''])
E Extra items in the left set:
E ''
E Extra items in the right set:
E ''
E Full diff:
E - set(['', '', '', ''])
E ? -----...
E
E ...Full output truncated ( lines hidden), use '-vv' to show test_assert.py:: AssertionError
failed in 0.10 seconds
(wda_python) bash-3.2$
自定义断言
官方解释如下
我们可以通过实现pytest_assertrepr_compare方法,来自定义assert实现
比如一个Class Foo,我们比较f1和f2
class Foo(object):
def __init__(self, val):
self.val = val def __eq__(self, other):
return self.val == other.val def test_compare():
f1 = Foo()
f2 = Foo(1)
assert f1 == f2
运行结果如下:
(wda_python) bash-3.2$ pytest -q test_foocompare.py
F [%]
================================================================ FAILURES ================================================================
______________________________________________________________ test_compare ______________________________________________________________ def test_compare():
f1 = Foo()
f2 = Foo()
> assert f1 == f2
E assert <test_foocompare.Foo object at 0x1029eb7d0> == <test_foocompare.Foo object at 0x1029eb290> test_foocompare.py:: AssertionError
failed in 0.09 seconds
(wda_python) bash-3.2$
错误提示不够友好, 我们可以通过完成pytest_assertrepr_compare方法自定义
from test_foocompare import Foo def pytest_assertrepr_compare(op, left, right):
if isinstance(left, Foo) and isinstance(right, Foo) and op == "==":
return ['Comparing Foo instance:', 'vals: %s != %s' % (left.val, right.val)]
运行结果如下:
(wda_python) bash-3.2$ pytest
========================================================== test session starts ===========================================================
platform darwin -- Python 2.7., pytest-4.1., py-1.7., pluggy-0.8.
rootdir: /Users/jackey/Documents/iOS/code/iOS-Auto/Agent_Test, inifile:
collected item test_foocompare.py F [%] ================================================================ FAILURES ================================================================
______________________________________________________________ test_compare ______________________________________________________________ def test_compare():
f1 = Foo()
f2 = Foo()
> assert f1 == f2
E assert Comparing Foo instance:
E vals: != test_foocompare.py:: AssertionError
======================================================== failed in 0.05 seconds ========================================================
(wda_python) bash-3.2$
iOS自动化探索(五)自动化测试框架pytest - Assert断言的使用的更多相关文章
- iOS自动化探索(四)自动化测试框架pytest - 安装和使用
自动化测试框架 - pytest pytest是Python最流行的单元测试框架之一, 帮助更便捷的编写测试脚本, 并支持多种功能复杂的测试场景, 能用来做app测试也能用作函数测试 官方文档: ht ...
- python3: 自动化测试框架pytest
最近在学习web自动化,所以在这里总结一下pytest框架. 其实pytest 和 unittest 都是自动化测试框架,但是pytest更好用一些,有以下几个优点:1)可以根据标签执行用例:2)?? ...
- iOS自动化探索(六)自动化测试框架pytest - fixtures
Fixture介绍 fixture是pytest特有的功能,它用pytest.fixture标识,定义在函数前面.在编写测试函数的时候,可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将 ...
- iOS自动化探索(七)自动化测试框架pytest - 测试报告
这里我们单独来看下关于如何生存测试报告 准备测试代码如下: #coding: utf- import pytest @pytest.fixture() def login(): print '输入账号 ...
- Python接口自动化测试框架: pytest+allure+jsonpath+requests+excel实现的接口自动化测试框架(学习成果)
废话 最近在自己学习接口自动化测试,这里也算是完成一个小的成果,欢迎大家交流指出不合适的地方,源码在文末 问题 整体代码结构优化未实现,导致最终测试时间变长,其他工具单接口测试只需要39ms,该框架中 ...
- iOS自动化探索(一)WebDriverAgent安装
WebDriverAgent FaceBook推出的一款iOS移动测试框架, 支持真机和模拟器, 同时支持USB, 官方是这样介绍的: https://github.com/facebook/WebD ...
- iOS自动化探索(十)代码覆盖率统计
iOS APP代码覆盖率统计 今年Q3季度领导给加了个任务要做前后端代码覆盖率统计, 鉴于对iOS代码代码比较熟就选择先从iOS端入手,折腾一整天后终于初步把流程跑通了记录如下 覆盖率监测的原理 Xc ...
- iOS自动化探索(九)使用Jenkins自动化打包并发布iOS App
继前一篇: Mac环境下安装Jenkins Jenkins安装好后, 我们试着创建一个iOS自动打包并发布的任务 iOS App构建必须在MAC上面使用xcode进行,所以我们要安装下xcode集成插 ...
- iOS自动化探索(三)WebDriverAgent Python Client
之前我们在终端试着调用过WDA API, 今天我们在看一个Python封装的api库 https://github.com/openatx/facebook-wda 安装方式(一): pip inst ...
随机推荐
- 让Windows Server 2008+IIS 7+ASP.NET支持10万个同时请求
具体设置如下: 1. 调整IIS 7应用程序池队列长度 由原来的默认1000改为65535. IIS Manager > ApplicationPools >Advanced Settin ...
- export,import ,export default的区别
首先要知道export,import ,export default是什么 ES6模块主要有两个功能:export和importexport用于对外输出本模块(一个文件可以理解为一个模块)变量的接口i ...
- java 自制Tomcat Andorid IOS 端 证书
java 自制证书 最近做项目用到Https 需要自制各种证书,Tomcat 用的JKS 格式, Andorid 端使用 BKS 格式, IOS 端使用 P12格式正式, 以及各种证书格式之间的转换. ...
- sqlserver导入excel的电话号码(身份证)变为科学计数解决方式
如果excel中有一列存的是手机号码或者身份证号码,那么导入到sql中时,会把手机或者身份证当作数字格式对待,因而会以科学记数法的形式存在sqlserver表中,解决方式,先将excel文件另存为文本 ...
- Java面向对象—继承
概述: 1.多个类相同的属性和功能抽取成另一个类, 让具有特有功能的类继承这个类. 2.通过 extends 关键字可以实现类与类的继承 格式: class 子类名 extends 父类名 {} 特点 ...
- nodejs fs学习
在本章的开始,我本来只想写一些关于fs模块的内容,虽然这个模块包含的方法非常的多,但没有想到的是它和我们上一篇文章Node.js Buffer还存在着关联,所以我又把关于Buffer的内容简单的学习下 ...
- win7解压的软件开机自启动
win7让你一个可执行程序开机启动. 运行-->regedit-->HKEY_LOCAL_MACHINE-->SOFTWARE-->Microsoft-->Windows ...
- dogo 官方翻译 Ajax with dojo/request
require(["dojo/request"], function(request){ request("helloworld.txt").then( fun ...
- Python3:自动发送账单邮件
Python3:自动发送账单邮件 一.前言 民间借贷,没有信用卡那样,每月会收到账单:为了民间借贷管理更加合理化,写了个还款账单小程序. 二.源码 (1)配置文件代码: [dbmysql] ip = ...
- fabric动态获取远程目录列表
#!/usr/bin/pythonfrom fabric.api import *env.user='root'env.hosts=['172.10.224.183','172.10.224.132' ...