引言:直接去编写一个完全没有接触过得脚本无疑是非常困难的,但是采取拆分以及迭代的方法一步步编写脚本就会好理解很多。
目录
接口信息:
接口请求地址:http://localhost:8080/jwshoplogin/user/login.do
接口请求参数:1.username:李明 2.password:123456
预期结果:登录成功、用户名不存在、密码错误
v1.0 发送请求,获取响应结果
- 定义接口请求地址:url = "接口请求地址"
- 通过request对象调用post方法发送请求,并接受响应:response = request.post(url).text
- 调式脚本:print响应结果
v1.0代码如下:
# 针对登录接口进行测试 # 接口请求地址:http://localhost:8080/jwshoplogin/user/login.do # 接口请求参数:1.username:李明 2.password:123456 # 预期结果:登录成功、用户名不存在、密码错误 import requests url = "http://localhost:8080/jwshoplogin/user/login.do" response = requests.post(url).text print(response)
运行结果如下,因为没有输入参数,所以可以当成是输入为空。
{"status":1,"msg":"用户名不存在"}
v2.0 传入接口测试数据
- 定义字典类型进行接口参数的赋值:userinfo = {"username":"李明", "password":"123456"}
- 传入到post方法中:response = request.post(url, data=userinfo).text
v2.0代码如下:
import requests url = "http://localhost:8080/jwshoplogin/user/login.do" userinfo = {"username":"李明", "password":"123456"} response = requests.post(url, data=userinfo).text print(response)
运行结果如下:
{"status":0,"msg":"登录成功"}
v3.0 对响应结果进行校验,得出测试结论
- 调用find方法,查找返回的字符中是否存在对应的信息:msg = response.find("预期结果")
- 判断语句得出相关的测试结论先用if语句实现功能。
v3.0代码如下:
import requests url = "http://localhost:8080/jwshoplogin/user/login.do" userinfo = {"username":"李明", "password":"123456"} response = requests.post(url, data=userinfo).text print(response) msg = response.find("登录成功") if msg > 0: print("测试通过") else: print("测试失败")
v4.0 从文件中传入多组测试数据
- 准备测试数据的csv文件
- 读取csv文件中的测试数据
- 以只读方式打开文件:file = open("userinfo.csv", "r")
- 获取文件中的数据--循环结构
- table = csv.reader(file)
- for row in table:
- print(row[下标])
- 把测试数据放入字典中:userinfo["参数的名字"] = row[下标]
v4.0代码如下:
import requests import csv # 1、调用接口 url = "http://localhost:8080/jwshoplogin/user/login.do" # 2、传入接口参数 # 2.1 读取csv文件中的数据 file = open("userinfo.csv", "r") table = csv.reader(file) # 把测试数据放入字典中 userinfo = {} for row in table: userinfo["username"] = row[0] userinfo["password"] = row[1] # 3、获取接口响应结果 response = requests.post(url, data=userinfo).text print(response) # 4、进行比对,得出测试结论 msg = response.find(row[2]) if msg > 0: print("测试通过") else: print("测试失败")
v5.0 把每一组测试数据对应的测试结果写入接口测试报告中
- 创建一个可写入的文件:file2 = open("test_result.csv", "w") # 因为文件不能同时阅读和书写,所以只能创建一个新的文件去填写测试数据。
- 向文件中写入内容file2.write("李明" + "," + "123456" + "," + "登录成功" + "\n") # 后面一定要加一个换行符,不然在写入的表格的时候不会自动换行。
- 最后记得关闭文件
v5.0代码如下:
import requests import csv file1 = open("userinfo.csv", "r") file2 = open("test_result.csv", "w") # 1、调用接口 url = "http://localhost:8080/jwshoplogin/user/login.do" # 2、传入接口参数 table = csv.reader(file1) userinfo = {} for row in table: userinfo["username"] = row[0] userinfo["password"] = row[1] # 3、获取接口响应结果 response = requests.post(url, userinfo).text print(response) r = response.find(row[2]) if r > 0: print("测试通过") # 加print便于检查代码,后期可以注释掉 file2.write(row[0] + "," + row[1] + "," + row[2] + "," + "测试通过" + "\n") else: print("测试失败") file2.write(row[0] + "," + row[1] + "," + row[2] + "," + "测试失败" + "\n") file2.close()
v6.0 使用面向对象的思想去设计脚本
面向对象设计思路:
- 一个接口测试对应一个类文件(接口比较少时可以采用,3个左右)
- 接口请求地址作为属性
- 接口的测试数据如果是固定的,也可以放在属性中定义
- 测试方法中实现:发送请求,获取响应,对响应的结果进行比对
- 在main方法中进行类的实例化
- 对象名 = 类名()
- 对象名.测试方法()
v6.0代码如下:
# 使用面向对象思想针对登录接口进行测试 # 接口请求地址:http://localhost:8080/jwshoplogin/user/login.do # 接口请求参数:1.username 2.password # 预期结果:登录成功、用户名不存在、密码错误 import requests import csv # 定义测试类 class LoginTest(): def __init__(self): self.url = "http://localhost:8080/jwshoplogin/user/login.do" def logintest(self): file1 = open("userinfo.csv", "r") file2 = open("test_result.csv", "w") userinfo = {} table = csv.reader(file1) for row in table: userinfo["username"] = row[0] userinfo["password"] = row[1] s = requests.session() response = s.post(self.url, data=userinfo).text r = response.find(row[2]) if r > 0: file2.write(row[0] + "," + row[1] + "," + row[2] + "," + "测试通过" + "\n") else: file2.write(row[0] + "," + row[1] + "," + row[2] + "," + "测试失败" + "\n") file2.close() # 在main方法中进行类的实例化 if __name__ == '__main__': login = LoginTest() login.logintest()