我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第25篇文章,点击查看活动详情
接口自动化测试
项目的选择
之前已经介绍过接口自动化测试缓解了自动化测试的困境,但也并非所有的项目都适合做自 动化测试,那么哪些项目适合做自动化测试呢。
·稳定的项目系统
所谓稳定的项目系统是指已经在线上运行过一定时间,并且未来不会频繁迭代更新,而且会 持续维护的项目。其实这一条就已经过滤了大部分小公司的项目了,在竞争日趋激烈的现在,争 取项目上线时间甚至比质量更重要,于是后期需要频繁迭代以完善项目,运气不好的话,竞争失 败就要转型做其他项目,那就根本不适合做自动化测试,全是浪费成本和资源。
·可预计结果的项目系统
可预计结果的项目系统可以理解为结果是固定的,可以从程序判断是否能通过的项目系统。 虽然大多数项目还是可以预计结果的,但其实也有部分项目结果是可变的,比如抓取数据和分析 数据类,数据的不确定性决定了结果的不确定性,作为程序来说无法根据唯一的预期结果做判断, 还是需要人工介入对结果进行判断。
·逻辑判断简单的项目系统
逻辑判断简单的项目系统,即自动化测试的代码量不能太大,与其花大量时间在写各种复杂 的判断和验证代码上,还不如人工测试有效率。而现在很多项目都开始往智能化发展,综合各种 条件得出最后的结果,这种项目的自动化测试的编码难度已经不低于开发了,所以也是不适合做 自动化测试的。
即便符合了以上的一些要求,实际还有各种限制的自动化测试情况,从而也往往只有部分功 能可以做自动化测试,因此自动化测试现阶段还主要用于冒烟测试和简单的回归测试,既能达到 部分减少重复人工测试,也不会耗费大量的精力在自动化测试上,算是达到某种程度的平衡吧。
结构化设计
所谓的自动化测试就是把一个个测试点通过一定的方式组合起来,而组合的方式一般分为3 种,顺序结构,判断结构和循环结构。
顺序结构
顺序结构顾名思义就是按照顺序一步步执行,当其中某一步出错后可以继续执行下一步,如图所示。
某一步无法执行或者执行错误,则继续进行下一个步骤,步骤之间只有先后关系,没有逻辑关系,当然数据之间可能存在相互依赖的关系,但最多 一步执行错误,后面其他步骤也会跟着错误而已,步骤还是会执行的,下面举例就能更好理解了。
步骤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 打印“请求失败”。
正常情况下的运行结果如图所示。
第五行和第七行不会同时执行,也就是说两者只可能执行一个,因为测试的目的本来就是测 试结果是否正常,所以需要根据返回的结果来判断测试的结果并输出。这种只是2选1的判断, 有时候结果未必只是2种,这时候需要引入elif来实现多种判断。多个判断结构如图所示。
先介绍下语法。
还是上面那个例子,其实对于返回的状态码来说不只是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"
运行结果如图所示。