接口测试-工作心得记录二

又是小一个月才写这篇,有的时候还不知道要写什么。刚发了一个大版本app版本,后面有些下一个版本的客户端测试用用例,和PM撕测试排期各种新仇旧怨各种撕逼真的是挺无语的。呵呵,昨天写测试脚本的遇到一个小问题我觉得正好拿出来写一篇。

背景:

最近test环境测试的总会遇到RD需要找你造数据的情况(我负责商家端,各种发帖子,但是字段又特别多),发完帖子,还要去crm去审核,当然直接改数据库也可以,一般情况我也是这么做的,但是总是这样的还是挺烦的。正好这两天不是特别忙就想写小脚本,思路是首先post请求发布接口(postpub接口),然后连接数据库更改对应表中的状态字段即可。思路很简单,写的时候就各种坑了。

首先我之前用的接口框架所有测试case都是继承Base_TestCase(就是基础测试类)里面包含各种生产的url域名,header,电话,常用类的实例化和ORM链接数据库session实例等等。所以我本能就写一个测试环境环境基类即Base_Test配置一个测试环境上面那一套。内容下面图片的内容:

接口测试-工作心得记录二

然后我的测试case就继承Base_Test类和unittest.TestCase类,正常书写一个case。然后实例化suite然后run(suite)。然后第一个坑就出现了,一直提示我测试类没有self.session这个属性当时我就困惑了,首先我先查看我的Base_Test基类是不是哪里有问题,后来发我排除没有问题。然后我就怀疑是不是一个包不能有两个测试基类,当时我就位置放在这里,如图:

接口测试-工作心得记录二

然后我就新创建一个包把Base_TestCaseTest.py文件放到里面去,然后再去run(suite),仍然还是报错一直提示我测试类没有self.session这个属性,当时真的疯了,各种百度发现根本没有,就想着RD聊了一下,开发写功能这种继承肯定没有问题,然后我想1天多我猜问题可能出现unittest这个框架,是不是不支持这种继承,后来特别偶然的发现是因为我的def setUp()手误写成了def setup() "u"没有大写,那心中的感觉简直了。除了这个问题还有一个很重要的方向也有一个问题,就是我本意是想写一个发布帖子的功能并成功置成各种需要状态,总是使用单元测试思路去写肯定是有问题的。主要还是习惯了unittest单测了,第一反应就是这个。而且还有很重要的一点就是测试环境和生产环境很多东西还是要区分开这样以后也方便维护,如果乱糟糟放到一起以后维护就是噩梦了。

既然要写还是要有最基本的分层,因为功能很少所以分层也很少,如图:

接口测试-工作心得记录二

config_vipB就是配置类了,把一些常量放到里面去。BasePostpub类就是发布基类,放置东西就是url域名,header等等了如图:

接口测试-工作心得记录二

唯一的区别就是增加了params,主要想法是因为发布字段很多,而且所有发布功能都是拼这个参数,所以把不变的都放到这里面了。

配置写好了,剩下就是写功能了,这个就看你想写什么了,其中我觉得很重要就是方法的备注,备注太重要了,我写了很多case了,因为是我自己写还好一点,但是有一些时间长了我也记不起,造成后面我都要自己看写的啥,很蛋疼,别懒写的详细一点也方便别人。如图:

接口测试-工作心得记录二

cookie肯定要根据传入的电话不同调用login接口获取到cookie,所以封装一个方法。帖子有开始时间和结束时间嘛都是获取本地的时间根据需要是直接变成string还是转成时间戳看接口的参数定义了。这里面我最想说的还是sqlalchemy中跟新对应字段值的方法update(),如图:

接口测试-工作心得记录二

想说update({})是因为好多博客都是些查询的,更新很少,也是找了很久磨磨唧唧的,就想拿出来简单说一下。和查询相似query(表映射的类名).filter(查询条件和sql中where一个意思).update({key:value})。

除了更新还有就是creat创建一个新数据,如图:

接口测试-工作心得记录二

想创建一个新记录直接用映射类名把值输入完成后,通过session.add(obj)添加进入session,然后使用session.commit()写入数据库对应表中.

这里面有一个坑就是映射关系的数据类型一定要和数据库表中对应字段保持一致(当然这个地方定义不对,但是写的时候对了也可以),另一个就是写参数的值的时候数据类型也要小心也对了,要不然会有莫名其妙的错误比如说我昨天遇到的,如图:

接口测试-工作心得记录二

这个错误顾名思义就是sql语句有错误,但是它提示的是在“)”附近,我就以为是附近有问题,也是找了一天,昨天真的都崩溃了,晚上实在不行找的rd问了一下,后来发现参数show_city_ids字段对应值的数据类型是varchar而不是int,改一下就写进去了。有时候定位问题还是太年轻了,方向不对,大概就这些,接口测试后面真的可以扩展出好多东西,以后想慢慢集成进去看看效果。