接口自动化测试脚本设计——接口间参数传递

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在进行接口自动化测试过程中,时常会遇到接口间参数传递问题,这时应如何设计接口测试脚本呢?


一、接口测试自动化

接口测试存在大量接口间参数传递问题,以下一点是平时工作中的试验解决方法,仅供参考~

二、使用步骤

1.正常场景接口测试

代码如下:

class ResetPasswordTest(unittest.TestCase):
    def gettoken(self,username,question,answer):
        url='http://localhost:8081/jwshoplogin/user/forget_check_answer.do'
        userinfo={"username":username,
                  "question":question,
                  "answer":answer
                  }
        response=requests.post(url,userinfo).json()
        return response["data"]
    def test_updatepassword(self):
        url='http://localhost:8081/jwshoplogin/user/forget_reset_password.do'
        userinfo={"username":"王七",
                  "passwordNew":"123456",
                  "forgetToken":self.gettoken("王七","最爱的美食","小葱拌豆腐")
                  }
        response=requests.post(url,userinfo).text
        if response.find("修改密码成功")>0:
            print("测试通过")

运行结果:
在这里插入图片描述说明正常场景可以进行参数传递,修改密码成功。

2.通过数据文件读取参数传入

2.1可控参数个数读取试验

数据文件如下:
在这里插入图片描述

代码如下:

#导入库文件
import csv
#只读方式打开数据文件
file=open("./testdatafile/ind_interface/ind_resetpassword_data.csv", "r")
#读取数据文件
table=csv.reader(file)
#初始化读取开始行下标
number=0
#循环读取文件数据
for row in table:
    #从数据文件第二行开始获取数据
    if number>0:
        #获取需要读取的参数个数
        i=int(row[0])
        #循环读取参数
        for j in range(1,i+1):
            print(row[j])
        print("\n")
number+=1

试验结果:
在这里插入图片描述

2.2与正常场景代码合并

代码如下:

import csv

import requests
import unittest

class ResetPasswordTest(unittest.TestCase):
    def setUp(self) -> None:
        self.url = 'http://localhost:8081/jwshoplogin/user/forget_reset_password.do'
        self.file1 = open("../../testdatafile/ind_interface/ind_resetpassword_data.csv", "r")
    def tearDown(self) -> None:
        self.file1.close()
    def gettoken(self,username,question,answer):
        url='http://localhost:8081/jwshoplogin/user/forget_check_answer.do'
        userinfo={"username":username,
                  "question":question,
                  "answer":answer
                  }
        response=requests.post(url,userinfo).json()
        return response["data"]
    def test_updatepassword(self):
        # url='http://localhost:8081/jwshoplogin/user/forget_reset_password.do'
        # userinfo={"username":"王七",
        #           "passwordNew":"123456",
        #           "forgetToken":self.gettoken("王七","最爱的美食","小葱拌豆腐")
        #           }
        # response=requests.post(url,userinfo).text
        # if response.find("修改密码成功")>0:
        #     print("测试通过")
        # 读取数据文件
        table = csv.reader(self.file1)
        # 初始化读取开始行下标
        number = 0
        #接口名称
        interfacename='回答完密保问题后修改密码'

        # 循环读取文件数据
        for row in table:
            #获取参数名
            args=["username","passwordNew","forgetToken"]
            # 初始化请求参数
            userinfo = {}
            # 从数据文件第二行开始获取数据
            if number > 0:
                # 获取需要读取的参数个数
                i = int(row[0])
                # 循环读取参数
                for j in range(1, i + 1):
                    userinfo[args[j-1]]=row[j]
                # print(userinfo)
                # 如果参数个数为3并且token值为空,则继续获取后面两个参数
                if i == 3 and row[3] == "":
                    question=row[4]
                    answer=row[5]
                    #通过gettoken方法获取token值
                    userinfo["forgetToken"]=self.gettoken(userinfo["username"],question,answer)
                # print(userinfo)
                # print("\n")
                # print(row[6])
                #发送接口请求
                response=requests.post(self.url,userinfo).text
                # print(response)
                #比对实际结果与期望结果
                if row[6] in response:
                    print("接口测试通过")
                else:
                    print("接口测试失败")
            #行号+1
            number+=1

2.3将测试结果写入测试报告文件

import csv

import requests
import unittest

class ResetPasswordTest(unittest.TestCase):
    def setUp(self) -> None:
        self.url = 'http://localhost:8081/jwshoplogin/user/forget_reset_password.do'
        self.file1 = open("../../testdatafile/ind_interface/ind_resetpassword_data.csv", "r")
        self.file2 = open("../../testresultfile/ind_interface/ind_resetpassword_result.csv", "w")
        # 写入表头
        self.file2.write("接口名称" + "," + "请求参数个数" + "," + "用户名" + "," + "新密码" + "," + "token" + "," + "密保问题" + "," + "答案" + "," + "测试结果" + "\n")
    def tearDown(self) -> None:
        self.file1.close()
        self.file2.close()
    def gettoken(self,username,question,answer):
        url='http://localhost:8081/jwshoplogin/user/forget_check_answer.do'
        userinfo={"username":username,
                  "question":question,
                  "answer":answer
                  }
        response=requests.post(url,userinfo).json()
        return response["data"]
    def test_updatepassword(self):
        # url='http://localhost:8081/jwshoplogin/user/forget_reset_password.do'
        # userinfo={"username":"王七",
        #           "passwordNew":"123456",
        #           "forgetToken":self.gettoken("王七","最爱的美食","小葱拌豆腐")
        #           }
        # response=requests.post(url,userinfo).text
        # if response.find("修改密码成功")>0:
        #     print("测试通过")
        # 读取数据文件
        table = csv.reader(self.file1)
        # 初始化读取开始行下标
        number = 0
        #接口名称
        interfacename='回答完密保问题后修改密码'

        # 循环读取文件数据
        for row in table:
            #获取参数名
            args=["username","passwordNew","forgetToken"]
            # 初始化请求参数
            userinfo = {}
            # 从数据文件第二行开始获取数据
            if number > 0:
                # 获取需要读取的参数个数
                i = int(row[0])
                # 循环读取参数
                for j in range(1, i + 1):
                    userinfo[args[j-1]]=row[j]
                # print(userinfo)
                # 如果参数个数为3并且token值为空,则继续获取后面两个参数
                if i == 3 and row[3] == "":
                    question=row[4]
                    answer=row[5]
                    #通过gettoken方法获取token值
                    userinfo["forgetToken"]=self.gettoken(userinfo["username"],question,answer)
                # print(userinfo)
                # print("\n")
                # print(row[6])
                #发送接口请求
                response=requests.post(self.url,userinfo).text
                # print(response)
                #比对实际结果与期望结果
                if row[6] in response:
                    self.file2.write(interfacename + "," + row[0] + "," + row[1] + "," + row[2] + "," + row[3] + "," + row[4] + "," + row[5] + "," + "测试通过" + ",")
                #     print("接口测试通过")
                else:
                    self.file2.write(interfacename + "," + row[0] + "," + row[1] + "," + row[2] + "," + row[3] + "," + row[4] + "," + row[5] + "," + "测试失败" + ",")
                #     print("接口测试失败")
                self.file2.write("\n")
            #行号+1
            number+=1

运行结果
在这里插入图片描述

总结

以上就是今天要讲的内容,本文仅仅简单介绍了接口自动化测试——参数传递的测试数据文件设计及实现的使用,如有谬误,还望指正,万分感谢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值