首先开始修复一个bug:

就是如果一个项目内的接口 没有url,比如新接口,那么进入接口库的时候就会报错导致页面一片空白:

Android Retrofit 请求接口422时返回的respone中没有错误信息_测试环境

这是因为没有url,也就是NoneType类型的object,是不可以进行split的,所以这里我们要进行处理一下。

所以我们找到views.py中的新增接口函数,给它加上api_url=‘’

Android Retrofit 请求接口422时返回的respone中没有错误信息_用例_02

这样再也不会新增出现url是NoneType的 接口了。但是问题仍然没有得到完美解决,因为线上已经存在了一大批这样的接口,你可以叫它们脏数据。这种怎么处理呢?要么你就写个sql,给所有这种接口的url全变成空字符串。要么就干脆在split这个代码上加个try:

Android Retrofit 请求接口422时返回的respone中没有错误信息_测试环境_03

好的,现在我们可以重启服务 测试下

Android Retrofit 请求接口422时返回的respone中没有错误信息_测试环境_04

发现一切正常了。

然后是另一个小bug,也感谢群内小伙伴提出:

就是在run_case.py文件的demo函数中这个请求体替换代码中,form-data和x-www... 的判断上 写错了:

原来是用的and

Android Retrofit 请求接口422时返回的respone中没有错误信息_测试环境_05

这里应该改成or,这是一个比较明显的bug了。恭喜@Lduyingsu 第一个找出这个问题。

Android Retrofit 请求接口422时返回的respone中没有错误信息_用例_06

好,本节开始回归主题,在上节中,我们基本完成了三种断言和俩种提取。

本节,我们再继续写个小功能,就是接口mock:

说到mock功能,其实主要作用在三个场景:

一个场景是我们业务测试的过程中,一些复杂的接口 比如第三方等,还有一些需要测试页面过多数据的加载情况,各种极端数据的展示情况等。这种时候,去构造真实数据比较麻烦,直接mock掉接口的返回值是最简单的办法了。

这种情况,我们正常需要用抓包工具去拦截前端/客户端,设置好要抓的接口路径,然后写好返回值,再用前端/客户端触发。当然这种东西我也自研了自动化的工具和平台。,比charles/fiddler等更友好一些。

另一个场景是我们做接口测试的时候,这种多接口联动组合成一个业务流大用例大场景的测试用例,其中某些接口并不重要或者说是属于支撑用的查询类接口,而执行它们又需要耗费巨大的时间等资源成本,而且这种非测试目标的服务用接口的稳定性也不靠谱,比如某些分支测试环境,我只想测试目标接口,但是需要这几个服务接口,但是这套测试环境还没有去配置拉取相应的那些支撑服务或其他模块。这时候就可以用到接口mock,对这些返回值进行写死,可以迅速执行完整套用例,节省了极大的时间和精力成本,也降低了不稳定的不可控因素。

最后一个场景是在某些前后端测试分层测试比较大的公司内,前端测试只专注于前端代码客户端代码的测试,而具体接口的返回值检查全部是服务端测试的事。俩边测试都要负责 业务逻辑测试。平时甚至都没什么交集。这种测试团队少则数十人,多则上百人。这时前端的ui自动化,为了提高稳定性和准确率,基本会对很多接口进行mock,来让其返回值固定,避免因为接口服务不通接口报错,导致前端测试自动化流程跑不下去。当然这种场景比较少见。