文章目录
-
- 1.环境安装
- 2.独立接口测试脚本,脚本技术演示
- 3.面向对象方式设计接口测试脚本(独立接口)
- 4.面向对象读取csv文件中的接口数据,进行测试(独立接口)
1.环境安装
安装和导包
pip install requests
pip install csv
import requests
import csv
2.独立接口测试脚本,脚本技术演示
1.发送请求获取响应结果
url做打码处理
1.定义接口请求地址
2.通过requests对象调用post方法发送请求,并接收响应
3.调试脚本,print响应结果
import requests
url = "http://1xxxxxxxx/xxxxx/login.do"
# 通过requests对象调用post方法发送请求,并接收响应
response = requests.post(url).text
print(response)
运行结果
返回其他响应结果方法
#返回字符串类型的文本内容
print(login_res.text)
#返回字典类型的json格式内容(null返回None)
print(login_res.json())
#返回cookies信息
print(login_res.cookies)
#返回字节流(破解)
print(login_res.content.decode('utf8'))
#返回字节流
print(login_res.content)
#返回响应头
print(login_res.headers)
#返回状态码
print(login_res.status_code)
2.传入接口测试数据
携带参数发送请求
1.定义字典类型进行接口参数的赋值
2.将参数传入到post方法中 response = requests.post(url, data=userinfo).text
import requests
url = "http://xxxxxxxx/jxxxxx/user/login.do"
# 定义字典类型进行接口参数的赋值
userinfo = {"username": "xxx1",
"password": "123456"}
response = requests.post(url, data=userinfo).text
print(response)
返回结果
3.对响应结果进行校验,得出测试结论
1.调用find方法,查找返回的字符串中是否存在对应得信息 msg = response.find(“预期结果”)
2.判断语句得出相关得出测试结论 if msg >0: ----这个预期结果是存在的,print(“测试通过”) else:print(“测试失败”)
url = "http://xxxxxxxx/user/login.do"
userinfo = {"username": "1",
"password": "123456"}
response = requests.post(url, data=userinfo).text
print(response)
# 预期结果
msg = response.find("用户名不存在")
if msg > 0:
print("测试通过")
else:
print("测试失败")
返回结果
上面的预期结果是用户明不存在,实际结果和预期相符,所以测试通过
{"status":1,"msg":"用户名不存在"}
测试通过
4.在文件中传入多组测试数据,进行数据驱动测试
1.准备测试数据的 csv文件
新建一个excel表写上要用到的测试数据,以csv(逗号分隔)类型保存到项目中
2.读取csv文件中的测试数据
2.1以只读的方式打开文件
2.2 获取文件中的数据,要用for循环去遍历文件中的每一列 循环结构,row[0]--------0是下标
table = csv.reader(file)
for row in table:
print(row[0])
2.3把测试数据放入字典中 userinfo[“username”] = row[0]--------username是参数的名字,0代表下标,第一列就是0,第二列就是1…
读取文件的完整代码演示
两个小数点表示返回上一级
url = "http:xxxxxxxxx/user/login.do"
file = open("../interface_Case/userinfo_data.csv", "r",)
table = csv.reader(file)
userinfo = {}
for row in table:
# print(row)
userinfo["username"] = row[0]
userinfo["password"] = row[1]
response = requests.post(url, data=userinfo).text
print(userinfo)
运行结果
{'username': '小红1', 'password': '123456'}
{'username': '张三', 'password': '123456'}
{'username': '小红1', 'password': '111111'}
{'username': '', 'password': ''}
5.把文件写入测试报告中
把每一组测试数据对应的测试结果写入测试报告中
1.在项目所在文件夹创建一个新得excel空文件,并以csv(逗号分隔)类型保存
r表示读得方式打开,w表示写得方式打开
2.向文件里写入内容,如果要换行,在末尾加上换行符
file2.write("zhangsan" + "," + "123" + "," "用户名不存在")
file2.write("zhangsan" + "," + "123" + "," "用户名不存在" + "\n")
完整代码演示
循环结束后需要调用close方法关闭打开的文件,以免造成内存泄露
file1 = open("userinfo_data.csv", "r",)
file2 = open("userinforesult_data.csv", "w")
url = "http://192.168.37.133:8888/jwshoplogin/user/login.do"
table = csv.reader(file1)
userinfo = {}
for row in table:
userinfo["username"] = row[0]
userinfo["password"] = row[1]
response = requests.post(url, data=userinfo).text
print(response)
r = response.find(row[2])
if r > 0:
print("接口测试通过")
file2.write(row[0] + "," + row[1] + "," + row[2] + "," + "测试通过" + "\n")
else:
print("接口测试失败")
file2.write(row[0] + "," + row[1] + "," + row[2] + "," + "测试失败" + "\n")
file2.close()
运行结果
{"status":0,"msg":"登录成功",}
接口测试通过
{"status":1,"msg":"用户名不存在"}
接口测试通过
{"status":1,"msg":"密码错误"}
接口测试通过
{"status":1,"msg":"用户名不存在"}
接口测试通过
写脚本程序进行多个版本的迭代,重新编写脚本
1.导入类库文件
2.做好测试准备工作-------打开文件,接口测试地址,文件的读取
3.接口测试的执行----------通过循环结构读取一组数据进行一次测试,进行测试结果分析,将测试结论写入测试报告中
3.面向对象方式设计接口测试脚本(独立接口)
用面向对象的思路设计接口测试脚本,定义一个类,把请求参数和请求方法封装到类里面
1.把请求地址和接口参数放在初始化属性里面
2.把请求方法进行封装
# 用面向对象的思想设计正常注册接口测试
# 定义测试类
import requests
class Register_test():
# 定义类属性,一般是定义在类的初始化方法中
def __init__(self):
self.url = "http://xxxxxxxxx/user/register.do"
self.userinfo = {}
self.userinfo = {"username": "李明",
"password": "123456",
"email": "[email protected]",
"phone": "13311096380",
"question": "最喜欢的水果",
"answer": "苹果"}
def register(self):
# 发送接口请求
s = requests.session()
response = s.post(self.url, data=self.userinfo).json()
print(response)
if __name__ == '__main__':
register_obj = Register_test()
register_obj.register()
4.面向对象读取csv文件中的接口数据,进行测试(独立接口)
用面向对象读取csv文件中相关的接口测试数据,进行接口测试;需要用到的库,requests,csv
设计脚本思路方向
1.在所在项目新建一个excel文件,把要测试的数据参数值放在里面,以csv(逗号分隔)类型保存
2.开始写脚本,定义一个类,定义初始化方法,写上url固定参数
class Check_test():
def __init__(self):
self.url = "http://xxxxxxx/user/check_vaild.do"
3.写一个测试方法,把读取csv文件,发送请求方法写进去
def checktest(self):
# 从csv文件中获取测试数据
checkinfo = {}
file = open("../interface_data/check_test_data.csv", "r")
table = csv.reader(file)
for row in table:
checkinfo["str"] = row[0]
checkinfo["type"] = row[1]
# 如果不却动读取数据是否正确,可以打印打印一下
print(row[0])
# 这里用requests对象调用session的方法去获取请求的一个对象,
# 然后赋值给一个变量,然后用这个对象再去调用post方法
s = requests.session()
# 把结果保存下来放在响应里面去
response = s.post(self.url,data=checkinfo).json()
print(response)
完整代码演示
import csv
import requests
class Check_test():
def __init__(self):
self.url = "http://1xxxxxxx/user/check_vaild.do"
def checktest(self):
# 从csv文件中获取测试数据
checkinfo = {}
file = open("../interface_data/check_test_data.csv", "r")
table = csv.reader(file)
for row in table:
checkinfo["str"] = row[0]
checkinfo["type"] = row[1]
print(row[0])
# 这里用requests对象调用session的方法去获取请求的一个对象,
# 然后赋值给一个变量,然后用这个对象再去调用post方法
s = requests.session()
# 把结果保存下来放在响应里面去
response = s.post(self.url,data=checkinfo).json()
print(response)
if __name__ == '__main__':
checkobj = Check_test()
checkobj.checktest()
4.预期结果比对,写入测试报告
4.1 在项目所在位置新创建一个空文件,或者直接写上路径,没有文件会自动创建新的文件
# 所在文件没有这个check_result.csv的话会自动创建一个新的文件夹
file2 = open("../interface_data/check_result.csv", "w")
4.2 用接收响应结果的对象调用find()方法,传入测试数据预期结果列;然后加上if,else条件判断,实际结果和预期结果进行比对,把实际结果写入测试报告
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")
完整代码演示
import csv
import requests
class Check_test():
def __init__(self):
self.url = "http://xxxxxxx/user/check_vaild.do"
def checktest(self):
# 从csv文件中获取测试数据
checkinfo = {}
file1 = open("../interface_data/check_test_data.csv", "r")
file2 = open("../interface_data/check_result.csv", "w")
table = csv.reader(file1)
for row in table:
checkinfo["str"] = row[0]
checkinfo["type"] = row[1]
print(row[0])
# 这里用requests对象调用session的方法去获取请求的一个对象,
# 然后赋值给一个变量,然后用这个对象再去调用post方法
s = requests.session()
# 把结果保存下来放在响应里面去
response = s.post(self.url, data=checkinfo).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()
if __name__ == '__main__':
checkobj = Check_test()
checkobj.checktest()
测试报告结果
面向对象的设计思路总结:
1.一个接口测试脚本对应一个类文件;
2.接口请求地址作为属性;
3.接口的测试数据如果时固定的,也可以放在属性中定义
4.测试方法中:发送请求,获取响应,对响应的结果进行比对
5.在main方法中进行类的实例化,类的实例化过程:
对象名 = 类名()
对象名.测试方法()
接口测试工作中容易出现的问题:接口文档没有了解清楚,出现理解上错误,导致发现了不时bug的bug,需要快速进行确认,并学习;得尽快对相关的测试资料进行修复:接口说明,测试数据