基于python的直播间接口测试实战 详解结合项目
基于python的直播间接口测试详解
一、基本用例内容描述
以设置白名单 /advisor/setUserWhiteList.do接口为例,该方法为POST
at first,先要导入一些常用到的模块
接下来是针对一个接口的单元测试框架,类名的前缀需要是Test开头,用例的def方法名必须是以test开头,这样以便我们后续便于管理testsuite
首先是框架分为SetUp(self),tearDown(self)以及test_***(self)这三个部分,
先说下SetUp(self),tearDown(self)这两个部分,
每进行一个test_***(self)会自动执行SetUp(self),tearDown(self),一般情况下我们在SetUp(self)中放入一些初始化的操作,在,tearDown(self)中加上收尾工作,因为我暂时没什么好收尾的所以tearDown直接pass了,但是在SetUp(self)加入的下面的post请求,目的是del数据以便每次测新的用例不受上一次测试结果的影响
图略
接下来时test_***(self)用例集部分的内容:
因为实际上test_500的情况无法测到(也不能把服务器搞挂了去测这个,灾备测试可以测500的情况)
这里主要针对常规的100、2××、3××、4××(注:我这个是json返回的retcode不是http返回码)
下面列举了一些实例:
图略
图略
主要是requests可以获得接口的json数据,然后我们根据测试文档assert进行测试,可以将异常写到except中自定义输出的格式可以方便查看
需要注意的是get请求的函数参数名是params
而post请求的参数名是data,这块需要区分一下
测试结果我们可以看到进度条以及打印出来的信息,如下:
当出现与预期不符合时,可以输出错误的内容:
二、数据库mySql的连接及增删改查操作
at first,需要导入DB_MYSQL模块 from dbMySQL import DB_MYSQL 。dbMySQL 可以在编译器上pip3 install dbMySQL 去安装下,如果手动下载安装的话可以把它放在lib文件夹下
还要用到cursors,也要导入该模块 import pymysql.cursors
首先是数据库初始化的工作,一般在这里会在__init__(self)初始化方法中写上连接数据库的配置:
下面以直播间需要连接的silver_quanzi为例:需要配置的connection信息如下:
图略
接下来就是一些定义增删改查的方法:
主要是用到上下文管理器处理游标操作,游标操作curser.execute后面可以放入去sql的查询语句,可以在这之前进行一些数据的处理(分片,合并)等,根据实例中的字典做一些处理
最后,在使用的时候可以先对DB进行类的初始化,db=DB_MYSQL()进行连接,然后把需要查询的数据以字典的形式写出来,最后使用完数据库一定要db.close()掉
三、登录参数传入
从振华的南交所登录模块或者是客户端登录会自动获得loginid和logintoken,很多接口会用到这个,所以就写到一个文件里
可以定义一个方法读取文件中的id,和token'内容
我这里返回的实际上是一个元组,接下来使用的时候,写上loginParams()[0]就可以使用该字段了
这个就是方便自己在
四、测试testsuite组装及testload运行
有时候会一次性执行很多测试用例集,就需要用testsuite组装这些测试用例,
例如,现在我有两个接口测试脚本:queryinfopfromview和
可以单独写一个main方法来放置testsuite
这里面的suite1、suite2就是我们刚才的两个接口脚本
suite对于这两个进行组装
下面texttestrunner就是执行的语句
注:上面的verbosity=0|1|2,被注释掉的内容实际的含义是(代表测试结果的不同模式):
0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共100个 失败20 成功80
1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
2 (详细模式):测试结果会显示每个测试用例的所有相关的信息
可以根据实际你需要的模式来选择用哪个。。。
五、输出测试报告
报告这块用到的是HTMLTestRunner,但是这个是用python2.7写的,实际上如果用python3.5的话 要重写这个文件,里面有些语法和引用上的区别需要改写下,
windows:下载HTMLTestRunner.py 文件,放在python目录下的lib文件夹
需要改写的所有内容如下::
参考:http://bbs.chinaunix.net/thread-4154743-1-1.html
由于 HTMLTestRunner.py 原本就是python2版本,目前还没找到python3版本,所以需要我们自己修改 HTMLTestRunner.py 文件。
1. 修改的地方
问题一:No module named StringIO
解决方法:
第94行引入的名称要改,改成import io,539行要改成self.outputBuffer = io.BytesIO()
问题二:AttributeError: 'dict' object has no attribute 'has_key'
解决方法:
到642行去做修改,if not rmap.has_key(cls): 需要换成 if not cls in rmap:
问题三:'str' object has no attribute 'decode'
解决方法:
python3 里面对字符的操作中,decode已经拿掉了。
定位一下,报在了772行,ue = e.decode('latin-1'),直接改成 ue = e ,另外766还有类似的uo = o.decode('latin-1'),改成 uo=o ;
问题四 :TypeError: can't concat bytes to str
解决方法:
那么778行的内容escape(uo+ue) ,将uo变成str类型即可,可修改该处内容为escape(uo.decode('utf-8')+ue)
问题五:TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method' and 'RPCProxy'
解决方法:
python2 和 python3 的print是很不同的,那么在3中,print 后面是不会跟>> 这样的,所以到631行,把print的语句修改掉,原来是print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime), 可改成 print (sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))
2. 保存
修改后对HTMLTestRunner.py 保存一下。
3. 调用语句更改
python3 里面打开文件使用 open,不要再去用file了。
即 fp = file(filename,'wb') 替换成 fp = open(filename,'wb') ;
关闭该文件可用fp.close()
有个写好的可以直接拿来用。
下面是实际是输出报告的内容
title和description可以分别定义改报告的标题和测试接口的描述
会写到C:\\Users\linyuchen\PycharmProjects\\autoInterfaces_touguLiveroom\\result.html这个文件中
为了防止转义,在\u \a之前加了\。
我们运行完毕后,如果在控制台打印出这个内容:(上面有执行的时间)
就表示测试报告已经完成了。
我们就可以去到我们的工程目录上查看我们的result.html报告文件了
报告上面全部执行通过的接口是绿色,部分有未通过的会标红下面会标记未通过的用例名称
接口用例上面的文字信息在之前的用例class下方有注释对应:
下面是生成的结果样式:
点击detail可以展开看失败或error的细节
如果需要解决字体超出边界以及字体模板显示没有填充区域完全的话可以修改HTMLTestRunner文件
在第310行pre的{}中加上内容:word-wrap:break-word;word-break:break-all;overflow:auto;
在第351行的宽度定义注释掉:
修改以后是显示下面这个样子:
代码放在svn上:
地址为:略
欢迎一起讨论~
有问题随时沟通~
基于python的直播间接口测试实战 详解结合项目的更多相关文章
- kafka实战教程(python操作kafka),kafka配置文件详解
kafka实战教程(python操作kafka),kafka配置文件详解 应用往Kafka写数据的原因有很多:用户行为分析.日志存储.异步通信等.多样化的使用场景带来了多样化的需求:消息是否能丢失?是 ...
- 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码
在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...
- 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING
<Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th 2014 Email:skyseraph00@163.com 更多精彩请直接 ...
- 《Node.js开发实战详解》学习笔记
<Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...
- 《iOS 7 应用开发实战详解》
<iOS 7 应用开发实战详解> 基本信息 作者: 朱元波 管蕾 出版社:人民邮电出版社 ISBN:9787115343697 上架时间:2014-4-25 出版日期:2014 年5 ...
- python+requests接口自动化测试框架实例详解
python+requests接口自动化测试框架实例详解 转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...
- (转)python标准库中socket模块详解
python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...
- python中requests库使用方法详解
目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...
- python 排序算法总结及实例详解
python 排序算法总结及实例详解 这篇文章主要介绍了python排序算法总结及实例详解的相关资料,需要的朋友可以参考下 总结了一下常见集中排序的算法 排序算法总结及实例详解"> 归 ...
随机推荐
- MySQL优化小案例:连接数
错误代码:MySQL: ERROR 1040: Too many connections 经常会遇到这个错误,要么是业务增长,正常的访问量增多,要么是自己的max_connections设置的过小了 ...
- SAP SQ01怎样从开发机传输到生产机
确认你的Query是本地的还是全局的(跨Client).假设是后者,会自己主动生成传输请求,用标准传输方式就可以. 假设是本地的Query,有两种方式: 方式1:复制成全局的,让后生成传输请求 方式2 ...
- exception javax.crypto.BadPaddingException: Given final block not properly padded
exception javax.crypto.BadPaddingException: Given final block not properly padded CreationTime--20 ...
- jquery实现下拉联动
很多项目用到这个功能,虽然写了不下5次以上了,一直没做过记录,记录一下,下次直接拷贝了,免得还得要重复写浪费时间. 先上HTML代码: 品牌: <select class="sa&qu ...
- 去除DataTable重复数据的三种方法(转)
转自:https://www.cnblogs.com/sunxi/p/4767577.html 业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需 ...
- 26、线性表(List)
1.List List接口是Collection的子接口,List是一个可重复集合 2.ArrayList和LinkedList ArrayList和LinkedList是List接口最常见的两个实现 ...
- 【TP框架】包括TP3.1和3.2,自带缓存使用机制
原文章出处: http://blog.163.com/liwei1987821@126/blog/static/172664928201422133218356/ 写在开始:缓存变量和session变 ...
- PHP原生:分享一个轻量级的缓存类=>cache.php
适用:原生PHP cache.php tips:代码最后有适用Demo哦. <?php /* * 缓存类 cache */ define("cacheRoot"," ...
- ASP.NET 对字符串大小写切换
来源:http://www.codeproject.com/Tips/297011/How-to-Toggle-String-Case-in-NET#alternative22 使用LINQ: pub ...
- 狄斯奎诺(dijkstra 模板)
/*狄斯奎诺算法(dijkstra)<邻接表> */ #include<stdio.h> #include<string.h> #include<stdlib ...