unittest自动化测试举例:自动读取ymal用例&调用接口并生成报告
用unittest框架写的接口自动化实现过程:
1.编写ymal格式用例:

2.导入ddt模块,该模块的主要功能是帮你读取ymal用例文件,自动获取内容并循环调用函数,具体见代码。
3.导入BeautifulReport模块,生成报告的模块。
4.导入unittest模块,使用unittest模块框架,编写自动化调用接口测试。
代码:
import unittest,requests
import ddt
from BeautifulReport import BeautifulReport as bf
from urllib import parse #为了用parse.urljoin()方法,智能拼接url
@ddt.ddt #自动的把ymal文件中的用例读出来
class Login(unittest.TestCase): #打开用例文件,调用接口
base_url = 'http://118.xx.xx.xx/'
@ddt.file_data('login.yaml')#ddt帮你读文件,获取文件内容,循环调用函数,将yaml文件的字典自动传给**kwargs
def test_request(self,**kwargs): #多个参数时用**kwargs,它接收字典里所有的k,v,即用例里的k,v
detail = kwargs.get('detail','没写用例描述')
self._testMethodDoc = detail #动态的用例描述,即用例里的描述。不加的话,用例描述会为null
url = kwargs.get('url')#url
url = parse.urljoin(self.base_url,url)#parse.urljoin()自动拼接好url
method = kwargs.get('method','get')#请求方式,如果没有传参,默认是get请求
data = kwargs.get('data',{}) #请求参数,如果get不到的话,默认给一个空字典
header = kwargs.get('header',{})#请求头,默认给一个空字典
cookie = kwargs.get('cookie',{})#cookie,默认给一个空字典
check = kwargs.get('check')
method = method.lower() #大小写转成小写,便于处理
try:
if method=='get':
res = requests.get(url,params=data,cookies=cookie,headers=header).text #预期结果
#因为接口有异常的情况下, 可能返回的不是json串,会报错
else:
res = requests.post(url,data=data,cookies=cookie,headers=header).text #预期结果
except Exception as e:
print('接口请求出错')
res = e #e接口返回的错误信息
#用用例里的成功返回字段作为校验标示,这样写使这个校验可以通用所有的测试用例
for c in check: #实际结果(用例里check写成了一个list)
self.assertIn(c,res,msg='预计结果不符,预期结果【%s】,实际结果【%s】'%(c,res)) #assertIn()断言,如果c不在check里,不会进行第二次循环校验 sutie = unittest.TestSuite() #实例化用例集合
sutie.addTest(unittest.makeSuite(Login)) #将Login函数添加进来
run = bf(sutie) #实例化报告
run.report('login_test','登录测试用例') #运行并生成报告文件
print(run.success_count) #通过的次数
print(run.failure_count) #失败的次数
注意事项/知识点:
1.from urllib import parse ,为了用parse.urljoin()方法,智能拼接url
2.ddt模块
3.断言:.assertIn(a,b,msg),判断a是否在b里,不是的话给出报错信息:msg
4.将结果通过for c in check的方式判断,可以作为通用方式来判断所有测试用例,较简单,通用。
5.在首次运行时,@ddt.file_data()函数会报错,如下图:

修正方法:鼠标移动至@ddt.file_data,按住Ctrl并用鼠标点击file_data函数,进入其源码,进入open()方法,加入encoding='utf-8'即可。


另外,也有一种比较繁琐的校验方法,如下:
import unittest,requests
import ddt
from BeautifulReport import BeautifulReport as bf
from urllib import parse #为了用parse.urljoin()方法,智能拼接url
@ddt.ddt #自动的把ymal文件中的用例读出来
class Login(unittest.TestCase): #打开用例文件,调用接口
base_url = 'http://118.xx.xx.xx/'
@ddt.file_data('login.yaml')#ddt帮你读文件,获取文件内容,循环调用函数,将yaml文件的字典自动传给**kwargs
def test_request(self,**kwargs): #多个参数时用**kwargs,它接收字典里所有的k,v,即用例里的k,v
detail = kwargs.get('detail','没写用例描述')
self._testMethodDoc = detail #动态的用例描述,即用例里的描述。不加的话,用例描述会为null
url = kwargs.get('url')#url
url = parse.urljoin(self.base_url,url)#parse.urljoin()自动拼接好url
method = kwargs.get('method','get')#请求方式,如果没有传参,默认是get请求
data = kwargs.get('data',{}) #请求参数,如果get不到的话,默认给一个空字典
header = kwargs.get('header',{})#请求头,默认给一个空字典
cookie = kwargs.get('cookie',{})#cookie,默认给一个空字典
check = kwargs.get('check')
method = method.lower() #大小写转成小写,便于处理
try:
if method=='get':
res = requests.get(url,params=data,cookies=cookie,headers=header).text #预期结果
#因为接口有异常的情况下, 可能返回的不是json串,会报错
else:
res = requests.post(url,data=data,cookies=cookie,headers=header).text #预期结果
except Exception as e:
print('接口请求出错')
res = e #e接口返回的错误信息
#这种方式就是校验每个结果与预期结果比较,比较繁琐,必须校验返回值的时候可用
userid = check.get('userId') #返回的预期结果
error_code = check.get('error_code') #返回的预期结果code
if userid:
real_userid = res.get('login_info').get('userid')
self.assertEqual(userid,real_userid,'校验userid是否一致') #判断userid,real_userid是否一致,不一致返回错误信息
real_code = res.get('error_code')
self.assertEqual(error_code,real_code,'校验接口返回码是否一致') sutie = unittest.TestSuite() #实例化用例集合
sutie.addTest(unittest.makeSuite(Login)) #将Login函数添加进来
run = bf(sutie) #实例化报告
run.report('login_test','登录测试用例') #运行并生成报告文件
print(run.success_count) #通过的次数
print(run.failure_count) #失败的次数
over!
unittest自动化测试举例:自动读取ymal用例&调用接口并生成报告的更多相关文章
- 【原创】selenium+python+openpyxl实现登录自动化测试,自动读取excel用例数据,并将数据结果自动写入到excel
# -*- coding: utf-8 -*- from selenium import webdriver from openpyxl import load_workbook from time ...
- day11_单元测试_读取yaml文件中的用例,自动获取多个yaml文件内容执行生成报告
一.使用.yaml格式的文件直接可以存放字典类型数据,如下图,其中如果有-下一行有缩进代表这是个list,截图中是整体是一个list,其中有两部分,第二部分又包含另外一个list 二.单元测试:开发自 ...
- unittest自动化测试框架
目录 框架的概念 Unittest单元测试框架 常用的assert语句 unittest创建测试代码的方式: unittest构建测试套件(测试用例集合): unittest忽略测试用例: 运行测试集 ...
- 18年selenium3+python3+unittest自动化测试教程(下)
第六章 自动化测试进阶实战篇幅 1.自动化测试实战进阶之网页单选性别资料实战 简介:讲解使用selenium修改input输入框和单选框 2.自动化测试之页面常见弹窗处理 简介:讲解使用seleniu ...
- C#_自动化测试 (四) 自动卸载软件
在平常的测试工作中,经常要安装软件,卸载软件, 即繁琐又累. 安装和卸载完全可以做成自动化. 安装软件我们可以通过自动化框架,自动点击Next,来自动安装. 卸载软件我们可以通过msiexec命 ...
- BeautifulReport--适用于unittest自动化测试的可视化报告
安装: 因为是由大神分享的,可以直接在github<https://github.com/TesterlifeRaymond/BeautifulReport>上下载 git clone g ...
- Android自动读取短信验证码
Android自动读取短信验证码 extends:http://www.cnblogs.com/jiayaguang/p/4366384.html,http://blog.csdn.net/yung ...
- iOS:自动读取图片插件KSImageNamed-Xcode-master的使用
gitHub链接:https://github.com/ksuther/KSImageNamed-Xcode KSImageNamed-Xcode是一个Xcode插件,可以帮助开发者在Xcode中 ...
- C# 处理Word自动生成报告 三、设计模板
C# 处理Word自动生成报告 一.概述 C# 处理Word自动生成报告 二.数据源例子 C# 处理Word自动生成报告 三.设计模板 C# 处理Word自动生成报告 四.程序处理 既然是模板就少不了 ...
随机推荐
- npm发布包
一.发布一个新包第一步:进入要发布的项目根目录,初始化为npm包: npm init 依次按提示填入包名.版本.描述.github地址.关键字.license等 这步完成之后会生成一个package. ...
- Divergent series
网址:https://en.wikipedia.org/wiki/Divergent_series
- 【学习】022 ActiveMQ
一.消息中间件概述 1.1消息中间件产生的背景 在客户端与服务器进行通讯时.客户端调用后,必须等待服务对象完成处理返回结果才能继续执行. 客户与服务器对象的生命周期紧密耦合,客户进程和服务对象进程都 ...
- git log混乱之混乱操作
好几个分支 然后就混乱了 git log信息一坨屎 git 删除某次指定的提交 git reset只是在本地仓库中回退版本,而远程仓库的版本不会变化. 以删除master分支为例 #新建一个备份的分支 ...
- mysql 5.0存储过程学习总结
mysql存储过程的创建,删除,调用及其他常用命令 本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群: 281442983 (点击链接加入群:http://jq.q ...
- express 设置跨域
app.use(function (req, res, next) { res.header('Access-Control-Allow-Origin', 'http://localhost: ...
- Keras get Tensor dimensions
int_shape(y_true)[0] int_shape(y_true)[1]
- 【leetcode】1143. Longest Common Subsequence
题目如下: Given two strings text1 and text2, return the length of their longest common subsequence. A su ...
- 【python实例】判断质数:for-break-else
""" for 变量 in 容器: 遍历--break 如果执行到了break语句, 则else不会被执行 else: break语句没有被执行时, 执行else &qu ...
- 解决webstorm卡顿问题,下面详细设置方法,使得webstorm快速打开
具体办法: 找到WebStorm.exe.vmoptions这个文件,路径如下 webstorm安装主目录>bin>WebStorm.exe.vmoptions 更改为 第二行:-Xms1 ...