实战项目整体布局概览
本实战项目基本的层级结构如下:
习惯性的命名规则,把所有的辅助类py文件放在commonsrc这个包里面,如数据库配置封装文件、接口配置封装文件等;辅助类py文件在整个项目中初期代码写好后一般是不会去大范围修改的,即使产品需求变更,这一块也是影响非常小的。以下就commonsrc包做一个概述性的讲解:
1、common.py
这个文件里面主要放的是一些公共的方法,如文件的读写,url的配置等,在整个项目中占比较大的角色。
2、configDB.py
文件中对数据库方法进行了封装,如游标,数据库连接。这样在接口测试核对数据时可能用到数据空做了一些预防。
3、configEmail.py
这里面主要是对邮件格式,邮件内容,邮件发送接收,邮件服务配置做了一些封装,便于后续的调用。
4、confiHttp.py
文件里有基本的post、get方法的封装,对post和get请求的参数,请求方法做了一些定义,当然如果想增加其他请求如put等也是可以的,这里面用到了一个requests库。
5、Log.py
这个文件是日志打印,基本上所有框架的源码这一块基本是没有什么变化的,就是打印一些log,以及log输出的表达方式。
6、HTMLTestRunner.py
测试报告,其实他是第三方包,unittest里一起的测试报告,本次把他放在这里是应为python3中,需要我们自己去对测试报告做一下自定义才能使用。具体的方法在我前面的书籍中也讲过。
7、其它
不做概述,只是一种调试增加而已。如写一下common方法是会新建一个文件写上代码作为调试,当代码完好后才移植到common.py里
公用类log.py和common.py也是放在了commonsrc.py,上述已经讲解不在累述。脚本主要是放在testcase这个包里面,脚本以test开头存放。其他的文件夹存放的是一些log输出和测试结果,文件等。runAll.py是整个测试的一键测试入口,里面主要定义了测试的脚本顺序,测试的数据调用等。
实战项目脚本调用方式
接口自动化测试,先得有接口的url,接口请求和接口期望返回参数,接口数据的断言核对等这一套流程,然后我们编写代码时才从这套流程中去发掘,一步一步的形成一个完好的测试脚本。接下来我们一个一个的去描述:
接口的url
接口的url主要是从接口配置源码ConfigHttp.py中的set_url(self.url)获取,写脚本的时候传入url,在这个方法里会自动组成一条完整的可供请求的接口链接。
接口请求
接口请求分请求头、请求body和请求方式,请求头采用的是从接口配置源码ConfigHttp.py中的set_headers(self.header)获取,脚本需要给方法传参header。请求的body是由从接口配置源码ConfigHttp.py中的set_params(self.param)、set_data(self.data)获取,同样需要在脚本里传入需要的请求体,请求方式这里主要还是从接口配置源码ConfigHttp.py中的get(self)、post(self)获取,测试脚本直接调用即可
接口期望返回的参数
返回的参数都是接口文档会有说明的,每条用例一个期望返回参数,本项目中有两种方法来存放期望返回参数,一个是放在excel里,一个是放在yaml文件里面。具体的获取方法在脚本编写这一块会有所体现。
接口数据断言核对
这部分的断言也是有两种一种简单的,一种叫难的。简单的断言指的是对msg和code接口返回的状态码较为简单的做一次断言,这部分的源码是脚本里直接写的以下为示例:
较为复杂和完整的断言是放在common文件里的check_result(response={}, hope_response={}, value=0)方法,对键值对都做了比较和输出,以及差异输出,源码如下:
实际接口测试入口
本项目的文件中新建了类和一些方法,在结尾处出现如下代码:
if __name__ == '__main__':
obj = AllTest()
obj.run()
这段代码的说明一下这个是调试代码,直接运行此文件来找到代码问题,其中 **if name == ‘main’😗*告诉我们这个文件是可执行的文件。如果没有这段代码就像只是单纯的作为其他执行文件的调用文件。每一个函数每一类不管有没有返回数据,都需要用调试来使得代码更加完善,pycharm也提供了断点调试的功能,配合起来是代码写的更加完美。
项目中你会发现每一个文件都可以单独执行,这个是因为调试需要,那么在测试中什么是我们的接口测试主入口呢?runAll.py这个文件就是。
文章原创首发于微信公众号 软件测试微课堂