标准化班组建设网站,全球室内设计公司排名,网站推广 html关键词代码解说,陕西省两学一做网站基本概念
UnitTest单元测试框架是受到JUnit的启发#xff0c;与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化#xff0c;配置共享和关机代码测试。支持将测试样例聚合到测试集中#xff0c;并将测试与报告框架独立。
它分为四个部分test fixture、TestC… 基本概念
UnitTest单元测试框架是受到JUnit的启发与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化配置共享和关机代码测试。支持将测试样例聚合到测试集中并将测试与报告框架独立。
它分为四个部分test fixture、TestCase、test suite、test runner分别是
测试脚手架为了开展项测试所需要进行的准备工作以及所有相关的清理操作
测试用例一个测试用例是一个独立的测试单元。它检查输入特定的数据时的响应
测试套件它用于归档需要一起执行的测试用例
测试运行器是一个用于执行和输出测试结果的组件。
TestCase详解
类TestCase为测试用例提供了支持。通过继承TestCase来设置一个新的测试类和设置测试方法每个测试方法通过实际响应结果与预期结果对比来实现单元测试。
测试用例包括的方法setUp()、tearDown()、setUpClass()、tearDownClass()。注意类名要以Test开头测试用例的名称要以test开头
下面一个示例来展示 import unittest
class Test_unittest(unittest.TestCase):def setUp(self) - None:print(setup)def test(self):print(test)def tearDown(self) - None:print(teardown)
if __name__ __main__:unittest.main()可以看到运行结果打印了三条测试用例里的内容setup和teatdown方法在每次执行测试用例前后都会执行如果再增加一条测试用例setup和teardown也会再执行一次如下图所示
所以如果想初始化和结束方法只想执行一次的话可以使用setUpClass()、tearDownClass()但是注意得在方法前面添加注解classmethod看下面示例和结果
import unittest
class Test_unittest(unittest.TestCase):classmethoddef setUpClass(cls) - None:print(setup)def testcase1(self):print(testcase1)def testcase2(self):print(testcase2)def tearDown(self) - None:print(teardown)
if __name__ __main__:unittest.main()可以看到使用了setUpClass()方法就只初始化了一次teardown没使用就每条用例都会执行一次。
常用方法
断言
测试用例中还有常用的断言和skip跳过测试用例。在UniTtest框架中也提供了一个自带的断言方式主要有以下几种
skip跳过
在实际测试中如有功能缺陷的功能点对应的自动化测试用例执行不了或者不执行的用例可以用skip()方法来操作使用方法为
1.unittest.skip(‘输入理由’)——无条件执行跳过操作
2.unittest.skipif(21,’理由’)——判断条件为true的时候执行
3.unittest.skipUnless(12’理由’)—判断条件为false的时候执行
4.unittest.expectedFailure—执行错误不计入不通过用例中
下面查看示例testcase1方法被跳过testcase2方法使用了断言但是断言结果不对于是有报错信息
import unittest
class Test_unittest(unittest.TestCase):classmethoddef setUpClass(cls) - None:print(setup)unittest.skipdef testcase1(self):print(testcase1)def testcase2(self):a 1self.assertEqual(a,2,msgerror)print(testcase2)def tearDown(self) - None:print(teardown)
if __name__ __main__:unittest.main()测试套件
当一个类里有多个测试用例又不会同时运行的时候可以选择把测试用例添加到suite中中suite运行pycharm中直接在文件中写不行要重新新建一个py文件。
1.直接一个一个添加到suite中 解释导入该文件中的类定义一个套件名称使用testsuite方法对该套件添加测试用例定义一个运行名称使用运行方法添加测试套件即可运行得一个个的添加测试用例。
2.定义一个列表【】把用例都存进去然后运行
3.直接读取类名的形式来运行最简单最方便不能使用‘’ 4.也是读取名字不过容易找不到类需要在前面加一个文件名。
TestRunner
1.编写完脚本之后重新新建一个文件然后添加用例到suite即可全部执行。
2.在网上下载htmlTestrunner源码复制到python/lib目录即可import导入
Python之request
主要方法解析
requests是Python实现的最简单易用的HTTP库requests库7个主要方法
举例普通接口测试的接口之间没有关联性所以直接定义变量去发起get、post请求即可。
其中post的请求常用的分为json和formdata两种方式请求的参数方式如截图所示。需要鉴权的需要导入auth包然后跟在请求方法后面。
requests方法详解
具体方法查看可以直接按住ctrl左键点击requests方法查看源码。 1.url: 请求地址
2.data:字典字节序列或文件对象,作为Request的内容
3.json: JSON格式的数据作为Request的内容
4.headers: 字典, HTTP定制头
5.cookie: 字典或CooKiJar Request中的cookie
6.auth: 元祖支持HTTP认证功能
7.files: 字典类型传输文件
8.timeout: 设定超时时间秒为单位
9.proxies: 字典类型设定访问代理服务器可以增加登录认证
10.allow_redirects: True/False,默认为True,重定向开关
11.stream: True/False默认为True,获取内容立即下载开关
12.verity: True/False默认Ture,认证ssl证书开关
13.cert: 本地ssl证书路径
Response返回方法详解
1.response.status_code #返回的http响应状态码
2.response.content #返回的是bytes型也就是二进制的数据
3.response.headers # 返回的http请求头
4.response.json() # 返回响应中的Json数据
5.response.url # 返回url
6.response.encoding # 返回响应的编码格式
7.response.cookies # 返回响应中的cookie
8.response.text #返回的是Unicode型的数据。—文本
Session详解
对于需要前后接口依赖的接口测试比如从上一个请求中获取token用作下一个接口请求的参数去提交的话用上面一种方法明显不合适按照上面的方法需要定义很多变量然后根据依赖去添加到对应的请求参数里。
下面这种方法使用session会话的方式贯穿前后只要添加了一次所有请求都能用到。
解释
1.这个是cynthia缺陷管理系统登录的时候需要拿到响应里的cookie作为下一个请求的cookie不然登录不上。
2.所以在UniTtest结构中可以把登录操作放到setup里面类似UI自动化一样登录放在初始化中。
3.在setup中把响应的cookie值加入到请求的里面去了同时添加了浏览器UA。
4.参数可以复用从头到尾请求的变量都是rspbody里的参数都是dict编写简单方便。
定义一个变量s等于requests的session会话后面都用这个s的会话去发起请求。
定义一个变量等于rsp等于s去发起请求的结果。
s会话请求的头文件中cookie需要添加tokenid不然登录不上这个id在rsp响应信息里。
因为响应信息是json字典格式所以要添加到请求头里需要按照截图格式。
如果需要在字典中添加字段或者内容按照截图的格式s.headers[‘xxx’]“xxx”如果字典中有这个keyvalue那么value值会直接更新没有这个key那么则会添加这个keyvalue到字典。
接口实战
添加token到头文件中
在公司实际项目中调接口首先需要获取token要先调用获取token的请求然后拿到token值之后在后面接口中添加到头文件中。 self.session.headers.update({“token”:rsp.json()[‘data’][‘token’]}) 左右滑动查看完整代码
通过在setup初始化方法中调用获取token来拿到token的值然后添加到整个session的head中去后续请求中都不需要额外添加head了。
使用ddt做参数化
ddt数据驱动测试首先pip list ddt安装第三方库在代码最上方导入库中的data
from ddt import ddtdata在测试类前面声明ddt用ddt 1、在测试用例前声明使用data用data
data(test1,test2)
def test_ddt1(self,value):print(value)在这里插入代码片
左右滑动查看完整代码运行结果中该用例执行了两次分别输出的test1和test2。
2、data用法读取文件
此方法需要解包故需要用到unpack方法在测试用例前声明unpack即可。
def readline(self):date []file open(D:\\base64\\keyid.txt,r,encodingutf-8)for line in file:date.append(line.split())return date
data(*readline())
unpack
def test_ddt2(self,vars):print(vars)对运行结果解释定义一个读取文件的方法定义一个list数组使用file函数的open方法读取文件名为“txt1”的文件以read的形式编码格式为utf-8以for循环的方式一直循环读取每一行以\n换行符为一行结尾以逗号分隔每一个参数最后返回data值以便下方直接调用。
上面写了读取方法之后在测试用例前直接使用该方法即可data*readfile这种形式接着使用unpack解包的方法即可。
生成测试报告
按照上述的方法编写好测试用例后结合UniTtest框架生成报告的HTMLTestRunner来生成接口测试报告。
从网上找的HTMLTestRunner库文件下载后放到Python安装目录的lib文件夹中就行后续就可以直接调用了https://github.com/GoverSky/HTMLTestRunner_cn/issues