接口测试(3)

news2024/11/14 13:47:02

接口自动化

# 获取图片验证码

import requests

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

print(response.status_code)
print(response.text)
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":"247dec0137944faeaf539d4d644ee92a"
}
response = requests.post(url=url,headers=header_data,json=login_data)

print(response.status_code)
print(response.json())

# login api
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_data):
        # 不用headers 因为json 默认 content-Type : application/json
        return requests.post(url=self.url_login, json=test_data)
from api.login import LoginAPI
import unittest
# 调用
class TestContractBusiness(unittest.TestCase):

    def setUp(self):
        self.login_api = LoginAPI()

    def tearDown(self):
        pass

    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")
        }
        res_l = self.login_api.login(test_data=login_data)
        print(res_l.status_code)
        print(res_l.json())
import requests

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

    def add_course(self, test_data, token):
        return requests.post(url=self.url_add_course, json=test_data, headers={"Authorization": token})
return requests.post(url=self.url_add_course, json=test_data, headers={"Authorization": token})

json headers自动设置Content-Type = application/json
from api.login import LoginAPI
from api.course import CourseAPI
import unittest

class TestContractBusiness(unittest.TestCase):
    token = None

    def setUp(self):
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()

    def tearDown(self):
        pass

    def test01_login_success(self):
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        # print(res_v.status_code)
        print(res_v.json())
        # 打印uuid
        print(res_v.json().get("uuid"))

        # 登录
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": 2,
            "uuid": res_v.json().get("uuid")
        }
        res_l = self.login_api.login(test_data=login_data)
        print(res_l.status_code)
        print(res_l.json())
        TestContractBusiness.token = res_l.json().get("token")
        print(TestContractBusiness.token)

        # 课程新增成功

    def test02_add_course(self):
        add_data = {"name": "测试开发提升课", "subject": "6", "price": 899, "applicablePerson": "2", "info": "测试开发提升课"}
        response = self.course_api.add_course(test_data=add_data, token=self.token)
        print(response.json())

上传文件

import requests

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

    # 合同上传接口
    def upload_contract(self, test_data, token):
        return requests.post(url=self.url_upload, files={"file": test_data}, headers={"Authorization": token})
from api.login import LoginAPI
from api.course import CourseAPI
from api.contract import ContractAPI
import unittest

class TestContractBusiness(unittest.TestCase):
    token = None

    def setUp(self):
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()
        self.contract = ContractAPI()

    def tearDown(self):
        pass

    def test01_login_success(self):
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        # print(res_v.status_code)
        print(res_v.json())
        # 打印uuid
        print(res_v.json().get("uuid"))

        # 登录
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": 2,
            "uuid": res_v.json().get("uuid")
        }
        res_l = self.login_api.login(test_data=login_data)
        print(res_l.status_code)
        print(res_l.json())
        TestContractBusiness.token = res_l.json().get("token")
        print(TestContractBusiness.token)

        # 课程新增成功

    def test02_add_course(self):
        add_data = {"name": "测试开发提升课", "subject": "6", "price": 899, "applicablePerson": "2", "info": "测试开发提升课"}
        response = self.course_api.add_course(test_data=add_data, token=self.token)
        print(response.json())

        # 上传合同成功

    def test03_upload_contract(self):
        f = open("../data/test.pdf", "rb")
        response = self.contract.upload_contract(test_data=f, token=TestContractBusiness.token)
        print(response.json())
import requests

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

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

    # 合同新增
    def add_contract(self, test_data, token):
        return requests.post(url=self.url_add_contract, json=test_data, headers={"Authorization": token})
from api.login import LoginAPI
from api.course import CourseAPI
from api.contract import ContractAPI
import unittest

class TestContractBusiness(unittest.TestCase):
    token = None

    def setUp(self):
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()
        self.contract = ContractAPI()

    def tearDown(self):
        pass

    def test01_login_success(self):
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        # print(res_v.status_code)
        print(res_v.json())
        # 打印uuid
        print(res_v.json().get("uuid"))

        # 登录
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": 2,
            "uuid": res_v.json().get("uuid")
        }
        res_l = self.login_api.login(test_data=login_data)
        print(res_l.status_code)
        print(res_l.json())
        TestContractBusiness.token = res_l.json().get("token")
        print(TestContractBusiness.token)

        # 课程新增成功

    def test02_add_course(self):
        add_data = {"name": "测试开发提升课", "subject": "6", "price": 899, "applicablePerson": "2", "info": "测试开发提升课"}
        response = self.course_api.add_course(test_data=add_data, token=self.token)
        print(response.json())

        # 上传合同成功

    def test03_upload_contract(self):
        f = open("../data/test.pdf", "rb")
        response = self.contract.upload_contract(test_data=f, token=TestContractBusiness.token)
        print(response.json())

    def test04_add_contract(self):
        # contractNo 数据唯一
        add_data = {
            "name": "测试888",
            "phone": "13612345678",
            "contractNo": "HT2024070806",
            "subject": "6",
            "courseId": "99",
            "channel": "0",
            "activityId": 77,
            "fileName": "xxx"}
        response = self.contract.add_contract(test_data=add_data, token=TestContractBusiness.token)
        print(response.json())

    断言

from api.login import LoginAPI
import unittest


class TestLoginAPI(unittest.TestCase):
    uuid = None

    def setUp(self):
        self.login_api = LoginAPI()
        response = self.login_api.get_verify_code()
        TestLoginAPI.uuid = response.json().get("uuid")

    def tearDown(self):
        pass

    def test01_sucess(self):
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": 2,
            "uuid": TestLoginAPI.uuid
        }
        response = self.login_api.login(test_data=login_data)
        # 预期 实际
        assert 200 == response.status_code

        assert '成功' in response.text

        assert 200 == response.json().get("code")

    def test02_without_username(self):
        login_data = {
            "username": "",
            "password": "HM_2023_test",
            "code": 2,
            "uuid": TestLoginAPI.uuid
        }
        response = self.login_api.login(test_data=login_data)
        print(response.json())
        # 预期 实际
        assert 200 == response.status_code

        assert '错误' in response.text

        assert 500 == response.json().get("code")

    def test03_username_not_exist(self):
        login_data = {
            "username": "jack666",
            "password": "HM_2023_test",
            "code": 2,
            "uuid": TestLoginAPI.uuid
        }
        response = self.login_api.login(test_data=login_data)
        print(response.json())
        # 预期 实际
        assert 200 == response.status_code

        assert '错误' in response.text

        assert 500 == response.json().get("code")

参数化

数据准备:

{
  "login_001":{"username": "admin", "password": "HM_2023_test", "status": 200,"message": "成功","code": 200},
  "login_002":{"username": "", "password": "HM_2023_test", "status": 200,"message": "错误","code": 500},
  "login_003":{"username": "jack666", "password": "HM_2023_test", "status": 200,"message": "错误","code": 500}
}

读入数据代码 

import json

def read_json(filename):
    filepath = "../data/" + filename
    with open(filepath, "r", encoding="utf-8") as f:
        return json.load(f)

scripts:

from api.login import LoginAPI
import unittest
from parameterized import parameterized
from common.read_json import read_json

def get_data():
    data = read_json("login_data.json")
    list1 = []
    for i in data.values():
        list1.append((i.get("username"),i.get("password"),i.get("status"),i.get("message"),i.get("code")))
    return list1


class TestLoginAPI(unittest.TestCase):
    uuid = None

    def setUp(self):
        self.login_api = LoginAPI()
        response = self.login_api.get_verify_code()
        TestLoginAPI.uuid = response.json().get("uuid")

    def tearDown(self):
        pass
    @parameterized.expand(get_data())
    def test_login(self,username,password,status,message,code):
        login_data = {
            "username": username,
            "password": password,
            "code": 2,
            "uuid": TestLoginAPI.uuid
        }
        response = self.login_api.login(test_data=login_data)
        # 预期 实际
        assert status == response.status_code

        assert message in response.text

        assert code == response.json().get("code")

如何测试未登录

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


class TestAddCourseAPI(unittest.TestCase):
    token = None

    def setUp(self):
        self.login = LoginAPI()
        self.course = CourseAPI()
        res_v = self.login.get_verify_code()
        uuid = res_v.json().get("uuid")
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": 2,
            "uuid": uuid
        }
        res_l = self.login.login(login_data)
        TestAddCourseAPI.token = res_l.json().get("token")

    def tearDown(self):
        pass

    def test01_success(self):
        add_data = {"name": "测试开发提升课", "subject": "6", "price": 899, "applicablePerson": "2", "info": "测试开发提升课"}
        response = self.course.add_course(test_data=add_data, token=TestAddCourseAPI.token)
        assert 200 == response.status_code
        assert "成功" in response.text
        assert 200 == response.json().get("code")

    # 如何测试未登录
    def test02_fail(self):
        add_data = {"name": "测试开发提升课", "subject": "6", "price": 899, "applicablePerson": "2", "info": "测试开发提升课"}
        response = self.course.add_course(test_data=add_data, token="xxx")
        assert 200 == response.status_code
        assert "认证失败" in response.text
        assert 401 == response.json().get("code")
import requests

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

    def add_course(self, test_data, token):
        return requests.post(url=self.url_add_course, json=test_data, headers={"Authorization": token})
     
    def select_course(self, test_data, token):
        return requests.get(url=self.url_select_course + "/{}".format(test_data), headers={"Authorization": token})
import unittest
from api.login import LoginAPI
from api.course import CourseAPI


class TestSelectCourseAPI(unittest.TestCase):
    token = None

    def setUp(self):
        self.login = LoginAPI()
        self.course = CourseAPI()
        res_v = self.login.get_verify_code()
        uuid = res_v.json().get("uuid")
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": 2,
            "uuid": uuid
        }
        res_l = self.login.login(login_data)
        TestSelectCourseAPI.token = res_l.json().get("token")

    def tearDown(self):
        pass

    def test01_select_success(self):
        response = self.course.select_course(test_data="?name=测试开发提升课01",token=TestSelectCourseAPI.token)
        print(response.json())
        assert 200 == response.status_code
        assert "成功" in response.text
        assert 200 == response.json().get("code")
    def test02_select_fail(self):
        response = self.course.select_course(test_data="?name=测试开发提升课01", token="xxx")
        print(response.json())
        assert 200 == response.status_code
        assert "认证失败" in response.text
        assert 401 == response.json().get("code")


import requests

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

    def add_course(self, test_data, token):
        return requests.post(url=self.url_add_course, json=test_data, headers={"Authorization": token})
     
    def select_course(self, test_data, token):
        return requests.get(url=self.url_select_course + "/{}".format(test_data), headers={"Authorization": token})
        
    def update_course(self,test_data,token):
        return requests.put(url=self.url_add_course, json=test_data, headers={"Authorization": token})
import unittest
from api.login import LoginAPI
from api.course import CourseAPI


class TestUpdateCourseAPI(unittest.TestCase):
    token = None

    def setUp(self):
        self.login = LoginAPI()
        self.course = CourseAPI()
        res_v = self.login.get_verify_code()
        uuid = res_v.json().get("uuid")
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": 2,
            "uuid": uuid
        }
        res_l = self.login.login(login_data)
        TestUpdateCourseAPI.token = res_l.json().get("token")

    def tearDown(self):
        pass

    def test01_update_success(self):
        update_data = {"id": "23056458704355861", "name": "测试开发提升课", "subject": "6", "price": 899,
                       "applicablePerson": "2", "info": "测试开发提升课"}
        response = self.course.update_course(test_data=update_data,token=TestUpdateCourseAPI.token)
        assert 200 == response.status_code
        assert "成功" in response.text
        assert 200 == response.json().get("code")
    def test02_update_fail(self):
        update_data = {"id": "23056458704355861", "name": "测试开发提升课", "subject": "6", "price": 899,
                       "applicablePerson": "2", "info": "测试开发提升课"}
        response = self.course.update_course(test_data=update_data,token="xxxx")
        assert 200 == response.status_code
        assert "认证失败" in response.text
        assert 401 == response.json().get("code")

路径参数时

import requests



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


    def add_course(self, test_data, token):
        return requests.post(url=self.url_add_course, json=test_data, headers={"Authorization": token})

    def select_course(self, test_data, token):
        return requests.get(url=self.url_select_course + "/{}".format(test_data), headers={"Authorization": token})

    def update_course(self,test_data,token):
        return requests.put(url=self.url_add_course, json=test_data, headers={"Authorization": token})

    def delete_course(self,course_id, token):
        return requests.delete(url=self.url_add_course + "/{}".format(course_id), headers={"Authorization": token})
import unittest
from api.login import LoginAPI
from api.course import CourseAPI


class TestDeleteCourseAPI(unittest.TestCase):
    token = None

    def setUp(self):
        self.login = LoginAPI()
        self.course = CourseAPI()
        res_v = self.login.get_verify_code()
        uuid = res_v.json().get("uuid")
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": 2,
            "uuid": uuid
        }
        res_l = self.login.login(login_data)
        TestDeleteCourseAPI.token = res_l.json().get("token")

    def tearDown(self):
        pass

    def test01_delete_success(self):
        response = self.course.delete_course(course_id=23056458704355867,token=TestDeleteCourseAPI.token)
        print(response.json())
        assert 200 == response.status_code
        assert "成功" in response.text
        assert 200 == response.json().get("code")

    def test02_delete_id_not_exist(self):
        response = self.course.delete_course(course_id=987654321,token=TestDeleteCourseAPI.token)
        print(response.json())
        assert 200 == response.status_code
        assert "失败" in response.text
        assert 500 == response.json().get("code")

    def test03_delete_fail(self):
        response = self.course.delete_course(course_id=23056458704355868,token="xxxx")
        print(response.json())
        assert 200 == response.status_code
        assert "认证失败" in response.text
        assert 401 == response.json().get("code")


config:

# 存放被测项目基本信息 如URL地址等
import os
BASE_URL = "http://kdtx-test.itheima.net"

BASE_PATH = os.path.dirname(__file__)
print(BASE_PATH)

测试报告

from common.HTMLTestRunner import HTMLTestRunner
import unittest
import time
import config
suite = unittest.defaultTestLoader.discover(config.BASE_PATH + "/script/","test*.py")

with open(config.BASE_PATH + "/report/{}.html".format(time.strftime("%Y_%m_%d %H_%M_%S")),"wb") as f:
    HTMLTestRunner(stream=f).run(suite)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1911653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【自动驾驶/机器人面试C++八股精选】专栏介绍

目录 一、自动驾驶和机器人技术发展前景二、C在自动驾驶和机器人领域的地位三、专栏介绍四、订阅需知 一、自动驾驶和机器人技术发展前景 随着人工智能、机器学习、传感器技术和计算能力的进步,自动驾驶和机器人的技术水平不断提升,使得它们更加智能、可…

国际网课平台Udemy上的亚马逊云科技AWS免费高分课程和创建、维护EC2动手实践

亚马逊云科技(AWS)是全球云行业最🔥火的云平台,在全球经济形势不好的大背景下,通过网课学习亚马逊云科技AWS基础备考亚马逊云科技AWS证书,对于找工作或者无背景转行做AWS帮助巨大。欢迎大家关注小李哥,及时了解世界最前…

Clickhouse的联合索引

Clickhouse 有了单独的键索引,为什么还需要有联合索引呢?了解过mysql的兄弟们应该都知道这个事。 对sql比较熟悉的兄弟们估计看见这个联合索引心里大概有点数了,不过clickhouse的联合索引相比mysql的又有些不一样了,mysql 很遵循最…

信息技术课上的纪律秘诀:营造有序学习环境

信息技术课是学生们探索数字世界的乐园,但同时也是课堂纪律管理的挑战场。电脑、网络、游戏等元素可能分散学生的注意力,影响学习效果。本文将分享一些有效的策略,帮助教师在信息技术课上维持课堂纪律,确保教学活动顺利进行。 制…

C++笔试强训3

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 如图所示,如图所示p-3指向的元素是6,printf里面的是%s,从6开…

BurpSuite抓IOS设备HTTPS流量

一、简述: Burp 这个工具做过 web 安全的人都应该用过,是个非常强大的抓包工具。在 PC 的浏览器上直接配置代理就行了,本篇文章就来介绍一下如何用 Burp 抓 IOS 设备上的流量,很多文章都介绍过怎么抓包,但是很多坑都没…

计算机网络之WPAN 和 WLAN

上一篇文章内容:无线局域网 1.WPAN(无线个人区域网) WPAN 是以个人为中心来使用的无线个人区域网,它实际上就是一个低功率、小范围、低速率和低价格的电缆替代技术。 (1) 蓝牙系统(Bluetooth) &#…

汇川CodeSysPLC教程03-2-14 与HMI通信

硬件连接 PLC与HMI连接采用何种连接方式,通常是参考双方支持哪些接口。PLC(可编程逻辑控制器)与HMI(人机界面)之间的通讯方式主要有以下几种: 串行通讯(Serial Communication)&…

redis学习(007 实战:黑马点评:登录)

黑马程序员Redis入门到实战教程,深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第25p-第p34的内容 文章目录 短信登录功能session 共享问题 短信登录功能 接口编写 这里是Result的封装 过滤器在拦截器的外层…

ISO/OSI七层模型

ISO:国际标准化/ OSI:开放系统互联 七层协议必背图 1.注意事项: 1.上三层是为用户服务的,下四层负责实际数据传输。 2.下四层的传输单位: 传输层; 数据段(报文) 网络层: 数据包(报…

【MATLAB源码-第232期】基于matlab的 (204,188) RS编码解码仿真,采用QPSK调制输出误码率曲线。

操作环境: MATLAB 2022a 1、算法描述 Reed-Solomon码(RS码)是一类广泛应用于数字通信和存储系统中的纠错码,尤其在光盘、卫星通信和QR码等领域有着重要作用。RS码是一种非二进制的纠删码,由Irving S. Reed和Gustave…

vue缓存页面,当tab切换时保留原有的查询条件

需求: 切换tab时,查询条件不变 路由页面: 单个页面上加这句话:

一文带你彻底搞懂什么是责任链模式!!

文章目录 什么是责任链模式?详细示例SpingMVC 中的责任链模式使用总结 什么是责任链模式? 在我们日常生活中,经常会出现一种场景:一个请求需要经过多个对象的处理才能得到最终的结果。比如,一个请假申请,需…

vue打包terser压缩去除控制台打印和断点

情况一: 1、vue-cli搭建 代码压缩工具terser在vue-cli里面是自动支持的,所以直接在vue.config.js里面加入下面配置: const {defineConfig} require(vue/cli-service) module.exportsdefineConfig({transpileDependencies:true,terser:{te…

火灾疏散逃生3d消防模拟演练教学系统助您轻松打造专业的消防培训基地

消防VR仿真教学系统将真实世界的消防挑战带入虚拟的训练环境,为您打造了一个前所未有的消防培训体验。在这里,您可以模拟现实中难以搭建的复杂场景,如工厂火灾、地下室逃生、人员密集场所的紧急疏散等。 深圳VR公司华锐视点研发的消防VR仿真教…

品牌文化五大维度,构建品牌竞争力的秘诀!

品牌文化对于企业的发展和成功至关重要。 品牌文化不仅是企业和消费者之间的纽带,也是企业内部员工的凝聚力。 在当今竞争激烈的市场环境中,建立一个有活力和影响力的品牌文化是每个企业都需要认真思考和实践的事情。 品牌文化的五大维度包括价值观、…

【PyTorch][chapter 26][李宏毅深度学习][attention-1]

前言: attention 在自然语言处理,声音处理里面是一个很重要的技巧. attention 要解决的是输入的向量长度不定. 根据输入输出的不同,分为三种场景: 输入N个向量,输出N个向量,这是本章的重点 输入N个向量,输出向量不定 输…

React setState

老生常谈之setState 是同步的还是异步的? 设想setState是同步的,那也就是每次调用setState都要进行新旧虚拟DOM的对比,然后将差异化的dom更新到页面上,性能损耗很大 所以react把setState设置为了异步,当状态更新时不…

pdf分割,这几款软件轻松搞定PDF拆分

在数字化办公日益普及的今天,PDF文件因其跨平台、不易修改的特性,成为了我们日常工作中不可或缺的一部分。然而,面对庞大的PDF文件,如何高效、准确地将其分割成多个小文件,以便更好地管理和使用,成为了许多…

utf8mb4和utf8的不同、若依框架,代码生成器,gitee,前端vue的下载、修复和启动(寻求大佬帮助若依框架三、2.3)

2024.7.9 一、数据库的排序和统一问题。utf8mb4和utf8的不同1.1 发现问题1.2 解决问题-在idea中用sql生成器,生成sql语句,然后在里面修改1.3 utf8和utf8mb4的区别 二、若依前后端框架。代码生成器(还没研究懂,但有三个方案&#x…