接口联调测试工作已经告一段落,现在总结如下:
1、首先接口联调测试的价值
2、接口联调要有工作思路
3、接口联调工作准备
4、接口联调测试数据设计
5、接口联调脚本研发
6、脚本联调测试
测试业务本身需要接口联调调用
独立接口正确,但有可能接口联调时会报错
提高接口测试脚本的复用性,降低接口脚本的维护成本
为后续的测试框架的设计合实现做好准备工作
1、接口联调工作分析及设计
1.1需求:对多个接口组成的联调测试的脚本 进行结构优化
# 1、用户注册
# 2、用户登录
# 3、忘记密码
# 4、提交密保问题答案
# 5、回答完密保问题后修改密码
1.2、工作步骤
1、设计接口联调流程
2、每个接口的一些参数用postman进行确认
3、依据接口设计要求,完善所有接口的参数说明文档。
4、类的设计,方法的设计
设计一个类及方法,
先实现一个接口的测试
逐步实现其他接口的类及方法的编写,实现一个调试一个
5、脚本结构优化,提升代码的复用性。
V1.0: 一个方法一个接口测试
V2.0:可以合并的类似的接口方法进行结构优化
V3.0:进行接口测试数据的参数化
csv测试数据文档,脚本参数化,只需要维护测试数据即可实现任意多个参数的测试
V4.0:进行接口测试报告的编写
6、工作问题随时记录
2、接口联调脚本设计
2.1 类图的设计:
类名称:workflow_forgetpassword_v2
属性包括属性名和属性类型
方法:包括方法名,是否需要参数,是否需要返回值。
这个里面,用户注册、用户登录、忘记密码可以优化成一个接口联调的测试类workflow_forgetpassword_v2,需要从main函数中传入url,userinfo,expresult的参数。4和5需要传递token,因此不能和123写在一起。
2.2 接口测试方法流程的设计
1、获取接口访问地址
2、明确接口测试数据
3、向服务器发送请求
get
post
4、获取服务器端的响应结果
5、依据接口设计要求
实际接口返回值与设计要求是否一致
给出测试结论
适用find方法查找字符串
2.3 特殊注意的地方
某些接口的测试参数可能来自于其他接口的实际返回值
接口的测试方法需要进行参数或返回值的定义
2.4 测试过程中
一旦发现接口的缺陷,及时的进行bug报告的编写,及时提交开发进行审核或修复。
3、脚本中用到的技术
3.1 与类相关的
1、类的定义 class 类名():
2、其他python中类的引用
适用于多人同时进行测试脚本的研发
from模块名.文件名 import 类名
3、类对象实例化 对象名=类名()
4、类的属性 写在类的初始化方法中 def __init__(self):
5、类的方法 def 方法名(self,其他参数):
3.2 发送请求并接受响应
导入包
import requests
发送接口post请求
response=request.post(url,data=...).text
发送接口get请求
response=request.get(url,data=...).text
3.3 对接口返回的响应结果进行比对
r=response.find("预期结果")
if r>0: 表示存在预期结果
测试通过
else:
测试失败
3.4 读取测试数据从csv文件中
import csv
file = open("测试数据文件名.csv","r")
table=csv.reader(file)
for row in table:
row[0]
下标从0开始
3.5 将测试结果写入文件中
将测试结果写入文件中
file=open("测试报告文件名.csv","方式")
w方式
覆盖写入
把文件进行一个清空
重新写入新的内容
a方式
追加写入
不清空以前的内容
在文档的后面继续写入
file.write("相关内容")
使用,号可以进行分割
使用/n来进行回车换行
file.close()
关闭文件
注意:如果有写文件的内容,在程序执行前,必须把对应文件关闭
3.6 根据代码转化为流程图
代码如下所示:
# 把测试脚本结构优化,脚本参数化,以及测试报告所有的技术进行合并V6.0
import csv
import requests
# 定义测试类
class workflow_forgetpassword_v6_test():
# 接口测试通用脚本
def userinterface_test(self, url, userinfo, expresult, interfacename):
# 定义字典数据,存储实际接口响应结果和测试结论
resultdate = {}
# 发送注册请求,并获取响应
response = requests.post(url, data=userinfo).text
print(response)
resultdate["接口实际返回值"] = str(response)
r = response.find(expresult)
if r > 0:
print(interfacename, "接口测试通过")
resultdate["测试结论"] = "测试通过"
else:
print(interfacename, "接口测试失败")
resultdate["测试结论"] = "测试失败"
print(resultdate)
return resultdate
# 把相关的测试结论写入测试报告
def result_report(self,reportfilename,resultdate,interfacename):
file=open(reportfilename,'a')
for key,value in resultdate.items():
file.write(interfacename+","+key+","+value+",")
file.write("\n")
file.close()
if __name__ == '__main__':
workflowobj=workflow_forgetpassword_v6_test()
reportfilename="testresultnew.csv"
file=open("test1.csv","r")
table=csv.reader(file)
for row in table:
#逐行读取相关内容,并将其设置为相关的参数
url=row[1]
expresult=row[3]
interfacename=row[5]
print("url=", url, " ", "expresult=", expresult, " ", "interfacename=", interfacename)
# 读取接口测试数据
userinfo = {}
resultdata={}
j=int(row[6])
for i in range(7,j*2+7,2):
userinfo[row[i]]=row[i+1]
# 调用接口测试方法,传入接口测试数据
resultdata=workflowobj.userinterface_test(url, userinfo, expresult, interfacename)
#调用写入测试报告文件,传入测试结论及实际接口参数
workflowobj.result_report(reportfilename,resultdata,interfacename)
流程图如图所示:
4、常见脚本编写问题
4.1、心理问题
代码能力弱
1、练习多少?自己写过多少行代码
统计
一个工作至少重复10遍
2、出现的代码问题是哪一类的?
思路没有,思路混乱
画流程图
把自己写过的代码转化为流程图
缺少整体编程观念
3、不细心,不严谨
语法错误
多次犯了不该犯的错
1、先记录到本子上
2、每次错误都记录一遍
3、响应的惩罚措施
超过5次以上
少吃一顿饭
4、举一反三
思考力提升
一定要在工作过程中,项目实践过程中,把自己的心态调整正确了,加上一个正确的方法,一个正确的思路,加上勤奋的实践,做成一件事情还是比较容易的。所以一定要仔细的分析一下,你在整个的过程中,你的问题主要出在哪里,比如对接口的设计是不是很清楚啊,对设计是不是很明确呢,设计数据时是不是很仔细呢?调试代码时是不是很耐心呢?判断自己哪里不足,自己有重点的做一些训练,才能提升我们的工作能力,转化成我们的成果物,对我们的公司,在我们工作中才能发挥价值。
4.2 方法问题
1、写代码不要求快
先写注释
发现问题,加入print调试语句
逐行逐个方法单独调试,逐个编写,逐个调试
由简到繁,逐步优化
把错误要进行记录和总结
2、注意脚本的请求方法以及传参合返回值的特点,基本一致才可以进行脚本结构的优化,否则还是要单独编写。
3、测试数据的设计尽量明确统一,脚本和数据文档的设计要相一致。
4、先进行技术试验,再进行脚本研发
先进行类及方法的设计,再进行具体实现。
4.3 编码难度
相比于开发而言,测试的工作难度主要集中在灵活性,同一个脚本能否处理多项测试。
4.4 FAQ及解决方法:
愿每个测试都能顺利转为测试开发,提高职业技能,成为前1%的存在,为社会创造更大的价值,为自己和家庭谋求更高的收入,所有人不受35岁职业年龄限制,能干到退休,直至财富自由;愿测试技术越来越进步,软件质量进一步得到提高,效率提高。愿祖国更加美好,人民更加幸福。多喜乐,常安宁。