基于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的直播间接口测试实战 详解结合项目的更多相关文章

  1. kafka实战教程(python操作kafka),kafka配置文件详解

    kafka实战教程(python操作kafka),kafka配置文件详解 应用往Kafka写数据的原因有很多:用户行为分析.日志存储.异步通信等.多样化的使用场景带来了多样化的需求:消息是否能丢失?是 ...

  2. 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码

    在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...

  3. 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING

    <Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th  2014 Email:skyseraph00@163.com 更多精彩请直接 ...

  4. 《Node.js开发实战详解》学习笔记

    <Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...

  5. 《iOS 7 应用开发实战详解》

    <iOS 7 应用开发实战详解> 基本信息 作者: 朱元波    管蕾 出版社:人民邮电出版社 ISBN:9787115343697 上架时间:2014-4-25 出版日期:2014 年5 ...

  6. python+requests接口自动化测试框架实例详解

    python+requests接口自动化测试框架实例详解   转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...

  7. (转)python标准库中socket模块详解

    python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...

  8. python中requests库使用方法详解

    目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...

  9. python 排序算法总结及实例详解

    python 排序算法总结及实例详解 这篇文章主要介绍了python排序算法总结及实例详解的相关资料,需要的朋友可以参考下 总结了一下常见集中排序的算法 排序算法总结及实例详解"> 归 ...

随机推荐

  1. Struts中的常量

    以下是Struts中常量的一些经常使用配置,保存下来留作积累吧. <?xml version="1.0" encoding="UTF-8"?> &l ...

  2. python之poplib模块下载并解析邮件

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之poplib模块下载并解析邮件 #https://github.com/michaelliao ...

  3. rabbitmq vhost

    参考 http://blog.163.com/sky20081816@126/blog/static/16476102320107173226920/ http://blog.csdn.net/kev ...

  4. 腾讯云-搭建 WordPress 个人博客

    搭建 WordPress 个人博客 准备 LNMP 环境 任务时间:30min ~ 60min LNMP 是 Linux.Nginx.MySQL 和 PHP 的缩写,是 WordPress 博客系统依 ...

  5. WordPress网站搬家的问题

    老邢的博客搬家全过程(wordpress搬家知识总结)   网站搬家过程中的几个问题   WordPress网站搬家的方法   WORDPRESS.ORG - zh-cn:WordPress 博客搬家 ...

  6. OOAD和UML

    ooad: object oriented analysis designer 又有两个分支: ooa(object oriented analysis):what to do ood(object  ...

  7. 跨域在嵌入页面iframe中设置cookie

    在IIS  HTTP响应头 中 添加: 名称:p3p 值:CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"

  8. 3.Java基础:String对象的创建和使用

    一.常用的创建方式 String s1=”abc“: String s2=”abc“: s1==s2    ==> true 解析:s1和s2指向的是同一个字符串池地址 二.不常用的创建方式 S ...

  9. OAF_OAF控件系列2 - LOV的实现(案例)

    2014-06-02 Created By BaoXinjian

  10. Android studio 如何让包有层次显示

    Android studio中我新建的包在原来包名后面显示,而我想让包名能层次展示: 方法: 点击如图部分,在弹出框中 去掉 ”compact empty middle package“前面勾