用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用例&调用接口并生成报告的更多相关文章

  1. 【原创】selenium+python+openpyxl实现登录自动化测试,自动读取excel用例数据,并将数据结果自动写入到excel

    # -*- coding: utf-8 -*- from selenium import webdriver from openpyxl import load_workbook from time ...

  2. day11_单元测试_读取yaml文件中的用例,自动获取多个yaml文件内容执行生成报告

    一.使用.yaml格式的文件直接可以存放字典类型数据,如下图,其中如果有-下一行有缩进代表这是个list,截图中是整体是一个list,其中有两部分,第二部分又包含另外一个list 二.单元测试:开发自 ...

  3. unittest自动化测试框架

    目录 框架的概念 Unittest单元测试框架 常用的assert语句 unittest创建测试代码的方式: unittest构建测试套件(测试用例集合): unittest忽略测试用例: 运行测试集 ...

  4. 18年selenium3+python3+unittest自动化测试教程(下)

    第六章 自动化测试进阶实战篇幅 1.自动化测试实战进阶之网页单选性别资料实战 简介:讲解使用selenium修改input输入框和单选框 2.自动化测试之页面常见弹窗处理 简介:讲解使用seleniu ...

  5. C#_自动化测试 (四) 自动卸载软件

    在平常的测试工作中,经常要安装软件,卸载软件,  即繁琐又累.  安装和卸载完全可以做成自动化. 安装软件我们可以通过自动化框架,自动点击Next,来自动安装.  卸载软件我们可以通过msiexec命 ...

  6. BeautifulReport--适用于unittest自动化测试的可视化报告

    安装: 因为是由大神分享的,可以直接在github<https://github.com/TesterlifeRaymond/BeautifulReport>上下载 git clone g ...

  7. Android自动读取短信验证码

    Android自动读取短信验证码  extends:http://www.cnblogs.com/jiayaguang/p/4366384.html,http://blog.csdn.net/yung ...

  8. iOS:自动读取图片插件KSImageNamed-Xcode-master的使用

    gitHub链接:https://github.com/ksuther/KSImageNamed-Xcode   KSImageNamed-Xcode是一个Xcode插件,可以帮助开发者在Xcode中 ...

  9. C# 处理Word自动生成报告 三、设计模板

    C# 处理Word自动生成报告 一.概述 C# 处理Word自动生成报告 二.数据源例子 C# 处理Word自动生成报告 三.设计模板 C# 处理Word自动生成报告 四.程序处理 既然是模板就少不了 ...

随机推荐

  1. 执行npm publish 报错:403 Forbidden - PUT https://registry.npmjs.org/kunmomotest - you must verify your email before publishing a new package: https://www.npmjs.com/email-edit

    前言 执行npm publish 报错:403 Forbidden - PUT https://registry.npmjs.org/kunmomotest - you must verify you ...

  2. Pure播放器

    我是的本地应用,并不会拿你的隐私数据.

  3. vue编写轮播图组件

    <template>  <div id="slider">    <div class="window" @mouseover=& ...

  4. Cacti+nagios 整合监控部署文档

    目录 Cacti+nagios监控部署步骤... 2 一.Cacti安装... 2 1需要安装的依赖软件包:... 2 2安装rrdtool 2 3启动数据库和httpd服务... 3 4将serve ...

  5. 09java进阶——IO

    1.File类 1.1目录及路径分隔符 package cn.jxufe.java.chapter09.demo01; import java.io.File; public class Test01 ...

  6. 洛谷 P2866 [USACO06NOV]糟糕的一天Bad Hair Day 牛客假日团队赛5 A (单调栈)

    链接:https://ac.nowcoder.com/acm/contest/984/A 来源:牛客网 题目描述 Some of Farmer John's N cows (1 ≤ N ≤ 80,00 ...

  7. Git之旅(1):安装git

    一.在windows中安装git git官网:https://git-scm.com/downloads 二.在centos系统安装git 2.1 配置base源和epel源 # cat /etc/y ...

  8. 前端之JavaScript:JS简单介绍

    JavaScript(JS)之简单介绍 一.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名Scr ...

  9. MySQL--limit使用注意

    limit m,n 的意义是在选择.查询得到的结果中,从第m条开始,拿连续的n条作为结果返回.根据它的原理可以知道,select ....limit m,n时要扫描得到的数据条数是m+n条.这就导致m ...

  10. 2019年8月5日~8月11日 第六周JAVA学习总结

    本周主要进行了对JAVA基础的学习和PTA代码的编写,平均每天花在学习上的时间约3个小时,花在代码上的时间约2个小时,花在解决问题上的时间约1.5个小时. 下周打算继续JAVA的学习,完成java面向 ...