接口自动化测试--requests

1requests的安装和入门

1.1requests的安装

使用编译器为PyCharm,语言为python

在PyCharm中创建一个python1的项目,并在这个项目终端中输入:pip install requests来安装requests(如果没安装pytest,则输入:pip install pytest)

1.2构建项目框架

框架如下图所示(目前只看软件包和目录):

api: 主要用来存放接口信息的

common:封装公共代码,如数据库操作类、日志等

data:外部数据

report:目前用不到

script:调用被封装的接口信息,实现对应的接口测试用例自动化

config:存放被测试项目的基本信息,如url地址等

pytest.ini:pytest文件

1.3入门案例--验证码登录

下图script软件包中的test01和test02即是入门案例,实现验证码登录:

以下是test01(请求验证码)的代码文件

# 获取验证码
import requests


requests=requests.get(url="http://kdtx-test.itheima.net/api/captchaImage")

print(requests.status_code)
print(requests.text)

 以下是test02(登录)的代码文件

# 登录成功

import requests

url = "http://kdtx-test.itheima.net/api/login"
header_data = {
    "Content-Type": "application/json"
}
login_data = {
    "username": "admin",
    "password": "HM_2023_test",
    "code": "2",
    "uuid": "4565905f1c624fdda887260a3464a705"
}
requests = requests.post(url=url, headers=header_data, json=login_data)

print(requests.status_code)
print(requests.text)

解析:

通过test01请求验证码uuid,然后将uuid中的值复制到登录中去

2登录,课程添加和合同上传(进阶)

2.1登录

经过入门案例后,我们发现每次运行都要复制uuid给登录程序后才能使用,这样太麻烦,故,我们创建一个login、test03代码文件

login代码如下:

import requests


# 创建接口类
class LoginAPI:
    def __init__(self):
        self.url_verify = "http://kdtx-test.itheima.net/api/captchaImage"
        self.url_login = "http://kdtx-test.itheima.net/api/login"

    def get_verify_code(self):
        return requests.get(url=self.url_verify)

    def login(self, test_header, test_data):
        return requests.post(url=self.url_login, headers=test_header, json=test_data)

test03代码如下: 

from api.login import LoginAPI


class TestContractBusiness:

    # 前置处理
    # 现版本用setup_method
    def setup_method(self):
        # 实例化接口对象
        self.login_api = LoginAPI()

    # 后置处理
    def teardown(self):
        pass

    # 登录成功
    # test是个关键词,是触发入口程序的
    def test01_login_success(self):
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        print(res_v.status_code)
        print(res_v.json())
        print(res_v.json().get("uuid"))

        # 登录
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": "2",
            "uuid": res_v.json().get("uuid")
        }
        login_header_data = {
            "Content-Type": "application/json"
        }
        res_l = self.login_api.login(test_header=login_header_data, test_data=login_data)
        print(res_l.status_code)
        print(res_l.json())

解析:

login为创建验证码和登录的请求接口,并将其url赋值

test03步骤为导包,实例化接口对象,然后创建一个测试方法,并在这个方法里通过实例化对象调用封装的接口方法,最后按照接口方法来传参

2.2课程添加

course代码如下:

# 导包
import requests


# 创建接口类
class CourseAPI:

    def __init__(self):
        self.url_add_course = "http://kdtx-test.itheima.net/api/clues/course"

    def add_course(self, test_data, token):
        # json=test_data会在请求头中自动添加"Content-Type": "application/json"
        return requests.post(url=self.url_add_course, json=test_data, headers={"Authorization": token})

test04代码如下:

from api.login import LoginAPI
from api.course import CourseAPI


class TestContractBusiness:
    token = None

    # 前置处理
    # 现版本用setup_method
    def setup_method(self):
        # 实例化接口对象
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()

    # 后置处理
    def teardown(self):
        pass

    # 登录成功
    # test是个关键词,是触发入口程序的
    def test01_login_success(self):
        # 获取验证码
        # login_api.get_verify_code()方法返回了一个验证码请求,将这个请求封装到res_v中
        res_v = self.login_api.get_verify_code()
        print(res_v.status_code)
        print(res_v.json())
        print(res_v.json().get("uuid"))

        # 登录
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": "2",
            "uuid": res_v.json().get("uuid")
        }
        login_header_data = {
            "Content-Type": "application/json"
        }
        res_l = self.login_api.login(test_header=login_header_data, test_data=login_data)
        print(res_l.status_code)
        print(res_l.json())
        # 提取登录成功后的token数据并保存在类的属性中
        TestContractBusiness.token = res_l.json().get("token")
        print(TestContractBusiness.token)

    # 课程添加成功
    def test02_add_course(self):
        add_data = {
            "name": "测试开发提升课01",
            "subject": "6",
            "price": "899",
            "applicablePerson": "2",
            "info": "测试开发提升课01"
        }
        # add_course的返回值为:requests.post(url=self.url_add_course, json=test_data, headers={"Authorization": token})
        response = self.course_api.add_course(test_data=add_data, token=TestContractBusiness.token)
        print(response.json())

2.3合同上传

contract的代码如下

import requests


class ContractAPI:
    def __init__(self):
        self.url_upload = "http://kdtx-test.itheima.net/api/common/upload"

    # 合同上传
    def upload_contract(self, test_data, token):
        return requests.post(url=self.url_upload, files={"file": test_data}, headers={"Authorization": token})

test05的代码如下(统合了前面的) 

from api.login import LoginAPI
from api.course import CourseAPI
from api.contract import ContractAPI


# 操作步骤
# 1是导包
# 2是实例化接口
# 3是创建一个测试方法,并在这个方法里通过实例化对象调用封装的接口方法,最后按照接口方法来传参
class TestContractBusiness:
    token = None

    # 前置处理
    # 现版本用setup_method
    def setup_method(self):
        # 实例化接口对象
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()
        self.contract_api = ContractAPI()

    # 后置处理
    def teardown(self):
        pass

    # 登录成功
    # test是个关键词,是触发入口程序的
    def test01_login_success(self):
        # 获取验证码
        # login_api.get_verify_code()方法返回了一个验证码请求,将这个请求封装到res_v中
        res_v = self.login_api.get_verify_code()
        print(res_v.status_code)
        print(res_v.json())
        print(res_v.json().get("uuid"))

        # 登录
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": "2",
            "uuid": res_v.json().get("uuid")
        }
        login_header_data = {
            "Content-Type": "application/json"
        }
        res_l = self.login_api.login(test_header=login_header_data, test_data=login_data)
        print(res_l.status_code)
        print(res_l.json())
        # 提取登录成功后的token数据并保存在类的属性中
        TestContractBusiness.token = res_l.json().get("token")
        print(TestContractBusiness.token)

    # 课程添加成功
    def test02_add_course(self):
        add_data = {
            "name": "测试开发提升课01",
            "subject": "6",
            "price": "899",
            "applicablePerson": "2",
            "info": "测试开发提升课01"
        }
        # add_course的返回值为:requests.post(url=self.url_add_course, json=test_data, headers={"Authorization": token})
        response = self.course_api.add_course(test_data=add_data, token=TestContractBusiness.token)
        print(response.json())

    # 合同上传
    def test03_upload_contract(self):
        # 读取pdf文件,r是读取,rb是读取二进制文件
        f = open("../data/test.pdf", "rb")
        response = self.contract_api.upload_contract(test_data=f, token=TestContractBusiness.token)
        print(response.json())

最终输出:

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值