接口自动化测试 项目的选择与结构化设计

335 阅读6分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第25篇文章,点击查看活动详情


接口自动化测试

项目的选择

之前已经介绍过接口自动化测试缓解了自动化测试的困境,但也并非所有的项目都适合做自 动化测试,那么哪些项目适合做自动化测试呢。

·稳定的项目系统

所谓稳定的项目系统是指已经在线上运行过一定时间,并且未来不会频繁迭代更新,而且会 持续维护的项目。其实这一条就已经过滤了大部分小公司的项目了,在竞争日趋激烈的现在,争 取项目上线时间甚至比质量更重要,于是后期需要频繁迭代以完善项目,运气不好的话,竞争失 败就要转型做其他项目,那就根本不适合做自动化测试,全是浪费成本和资源。

·可预计结果的项目系统

可预计结果的项目系统可以理解为结果是固定的,可以从程序判断是否能通过的项目系统。 虽然大多数项目还是可以预计结果的,但其实也有部分项目结果是可变的,比如抓取数据和分析 数据类,数据的不确定性决定了结果的不确定性,作为程序来说无法根据唯一的预期结果做判断, 还是需要人工介入对结果进行判断。

·逻辑判断简单的项目系统

逻辑判断简单的项目系统,即自动化测试的代码量不能太大,与其花大量时间在写各种复杂 的判断和验证代码上,还不如人工测试有效率。而现在很多项目都开始往智能化发展,综合各种 条件得出最后的结果,这种项目的自动化测试的编码难度已经不低于开发了,所以也是不适合做 自动化测试的。

即便符合了以上的一些要求,实际还有各种限制的自动化测试情况,从而也往往只有部分功 能可以做自动化测试,因此自动化测试现阶段还主要用于冒烟测试和简单的回归测试,既能达到 部分减少重复人工测试,也不会耗费大量的精力在自动化测试上,算是达到某种程度的平衡吧。

结构化设计

所谓的自动化测试就是把一个个测试点通过一定的方式组合起来,而组合的方式一般分为3 种,顺序结构,判断结构和循环结构。

顺序结构

顺序结构顾名思义就是按照顺序一步步执行,当其中某一步出错后可以继续执行下一步,如图所示。

image.png

某一步无法执行或者执行错误,则继续进行下一个步骤,步骤之间只有先后关系,没有逻辑关系,当然数据之间可能存在相互依赖的关系,但最多 一步执行错误,后面其他步骤也会跟着错误而已,步骤还是会执行的,下面举例就能更好理解了。

步骤1:登录某个网站,登录完成后将 cookie取出来。

步骤2:将步骤1的cookie传递过来,并带着cookie 发送请求去获取登录后的个人信息。

当步骤1登录失败时是取不到cookie的,所以步骤2获取不到步骤1 cookie,那自然也获取不到个人信息,所以从数据关系来说步骤2的操作依附于步骤1的操作结 果,但从逻辑关系来说步骤2并不会因为步骤1的操作结果失败而不执行。这是顺序结构最大的 局限性,所以用的相对比较少。

判断结构

判断结构就是根据表达式判断结果的不同,而去执行不同的代码,因此弥补了顺序结构在逻 辑关系上的缺陷,让测试脚本更具有灵活性。

这是最简单的判断流程,执行步骤1,然后进入判断,当判断结果是True时,执行步骤2, 当判断结果是False时,执行步骤3,因此步骤2和步骤3是互斥的,两者只能执行一个,具体语 法如下。

if(判断表达式):

    执行实体1 

else:

    执行实体2

还是以网易首页的请求作为例子,请求成功,则输出结果“请求成功”,请求失败,则输出 结果“请求失败”。

实例代码:

#-*-coding:utf8

1 import requests

2 test_url = "http://www.163.com" 

3 response =requests.get(test_ur1) 

4 if (response.status_code= 

5print("请求成功") 

6 else:

7print("请求失败”)

代码说明:

3 发送一个HTTP请求到网易首页。

4 判断返回数据的状态码是否等于200,当返回码等于200时执行第5行代码。

5 打印“请求成功”。

6 当状态码不等于200时,则执行第7行代码。

7 打印“请求失败”。

正常情况下的运行结果如图所示。

image.png

第五行和第七行不会同时执行,也就是说两者只可能执行一个,因为测试的目的本来就是测 试结果是否正常,所以需要根据返回的结果来判断测试的结果并输出。这种只是2选1的判断, 有时候结果未必只是2种,这时候需要引入elif来实现多种判断。多个判断结构如图所示。

image.png

先介绍下语法。

image.png

还是上面那个例子,其实对于返回的状态码来说不只是200,可能是404、500、502等,前 面一个代码例子只能区分成功和不成功,并不能区分失败的原因,所以通过if和elif的方式对每 种情况进行判断,并打印出每种返回结果的注解。来改一下代码。

实例代码:

#-*-coding:utf8

1 import requests

2 test_url ="www.163.com"

3 response =requests.get(tes

4 if(response.status_code==200):

5 print("请求成功”)

6 elif (response.status_code==404)

7 print("请求页面不存在”)

8 elif(response.status_code==502)

9 print("连接服务器失败”)

10 else:

11 print("其他未知错误”)

代码说明:

4判断返回数据的状态码是否等于200,当返回码等于200时执行第5行代码。

6判断返回数据的状态码是否等于404,当返回码等于404时执行第7行代码。

8判断返回数据的状态码是否等于502,当返回码等于502时执行第9行代码。

10当状态码不等于以上3种,则执行第11行代码。

如果想要看异常情况的话,可以将URL改成不存在的地址或者断开网络,来改一下代码。 把 test_url改成"http://www.addf.com/2222.html"

运行结果如图所示。

image.png