天天看点

python接口自动化测试之requests(独立接口测试)

文章目录

    • 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(逗号分隔)类型保存到项目中
python接口自动化测试之requests(独立接口测试)

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(逗号分隔)类型保存

python接口自动化测试之requests(独立接口测试)
python接口自动化测试之requests(独立接口测试)

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()
           

测试报告结果

python接口自动化测试之requests(独立接口测试)

面向对象的设计思路总结:

1.一个接口测试脚本对应一个类文件;

2.接口请求地址作为属性;

3.接口的测试数据如果时固定的,也可以放在属性中定义

4.测试方法中:发送请求,获取响应,对响应的结果进行比对

5.在main方法中进行类的实例化,类的实例化过程:

对象名 = 类名()

对象名.测试方法()

接口测试工作中容易出现的问题:接口文档没有了解清楚,出现理解上错误,导致发现了不时bug的bug,需要快速进行确认,并学习;得尽快对相关的测试资料进行修复:接口说明,测试数据