基于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模块 fromdbMySQL importDB_MYSQL 。dbMySQL 可以在编译器上pip3 install dbMySQL 去安装下,如果手动下载安装的话可以把它放在lib文件夹下
还要用到cursors,也要导入该模块 importpymysql.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文件夹
需要改写的所有内容如下::
由于 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上:
地址为:略
欢迎一起讨论~
有问题随时沟通~