用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. CentOS7部署CDH6.0.1大数据平台

    Cloudera’s Distribution Including Apache Hadoop,简称“CDH”,基于Web的用户界面,支持大多数Hadoop组件,包括HDFS.MapReduce.Hi ...

  2. [七月挑选]使用hexo建立主题,并发布到github

    title: 使用hexo建立主题,并发布到github 根据hexo官网的概述和hexo官网的建站,搭建最开始的hexo博客. 1.环境预先安装好node.js和git 2.npm安装hexo: $ ...

  3. [七月挑选]使用idea创建spring boot 项目

    title: 使用idea创建spring boot 项目 参考lindaZ的IntelliJ IDEA 创建spring boot 的Hello World 项目 1.Open IDEA,choos ...

  4. 中国各个省市县的人口统计,echart展示

    公司要做一个excel形式的人口统计表,我感觉应该更直观一些展示,所以就选用了echart进行展示,由于时间短所以制作的比较简单粗糙,但相应的数据还是有很大的可参考性. 刚好下载了jfinal3.5, ...

  5. Java多线程(1)

    线程与进程 进程:程序的执行过程 线程:线程共享进程的资源 Java多线程 实现的方式 继承Tread类:使用getName()获取当前线程名 实现Runnable接口:Thread.currentT ...

  6. 使用impala连接hive踩坑过程

    一.打包镜像出错 docker build总是出错,如果你用的是python3.7,可以考虑使用python3.6版本 并且注意:选择thrift-sasl==0.2.1,否则会出现: Attribu ...

  7. 01.Linux-CentOS系统清理缓存脚本

    #自动清理缓存脚本 [root@k8s-node3 ~]# vim freemem.sh#! /bin/sh#当前已使用内存大小used=`free -m | awk 'NR==2' | awk '{ ...

  8. 磁盘IO性能优化-实践

    RAID卡缓存策略调整 原因详解 操作实例 I/O 调度算法 文件系统journal 磁盘挂载参数 操作实例 性能数据对比 RAID卡缓存策略调整 可以将RAID卡缓存策略由No Write Cach ...

  9. 牛客练习赛49 B 筱玛爱阅读 (状压DP,子集生成)

    链接:https://ac.nowcoder.com/acm/contest/946/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262875K,其他语言5257 ...

  10. 缓存算法LRU笔记

      LRU原理与分析 LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,也就是说,LRU缓存把最近最少使用的数据移除,让给最新读取的数据.而往往最常读取的,也是读取 ...