【Unittest】Requests实现小程序项目接口测试

这篇具有很好参考价值的文章主要介绍了【Unittest】Requests实现小程序项目接口测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、搭建接口测试框架

目录结构如下。

【Unittest】Requests实现小程序项目接口测试,unittest,python,接口测试,自动化测试

二、初始化日志

在utils.py文件中编写如下如下代码,初始化日志。

# 导入app.py全局变量文件
import app
import logging
from logging import handlers

# 定义初始化日志的函数
def init_logging():
    # 创建日志器
    logger = logging.getLogger()
    # 设置日志等级
    logger.setLevel(logging.INFO)
    # 创建控制台处理器
    sh = logging.StreamHandler()
    # 创建文件处理器
    fh = logging.handlers.TimedRotatingFileHandler(app.BASE_DIR+"/log/mimi.log",
                                                   when='M',
                                                   interval=5,
                                                   backupCount=3,
                                                   encoding='utf-8')
    # 定义日志的格式(格式化器)
    fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
    formatter = logging.Formatter(fmt)
    # 将格式化器添加到处理器
    sh.setFormatter(formatter)
    fh.setFormatter(formatter)
    # 将处理器添加到日志器当中
    logger.addHandler(sh)
    logger.addHandler(fh)

在api下的init.py文件中编写如下代码,进行实际的初始化日志。

# 导入utils.py中编写的初始化日志的函数和logging模块
# 然后调用初始化日志的函数
# 最后测试日志是不是能够打印

# 导包
import utils
import logging

# 初始化日志
utils.init_logging()

# 使用logging模块打印日志
logging.info("Test初始化日志后能不能打印日志")

三、定义全局变量

在app.py文件中编写如下代码,定义全局变量。

# 1 测试项目接口的代码项目地址
import os

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
print(BASE_DIR)
# 2 测试项目服务器的根URL
BASE_URL = "http://www.nidexiangmu.com:13140"
# 3 Token(令牌,维持登录状态)
TOKEN = "bd8f3599604107c0d7eebe1ffe15d84a"
# 4 HEADERS(请求一般都是固定的)
HEADERS = {"Content-Type":"application/json", "token": TOKEN}
# 5 Code(由微信小程序前端生成,用于发送给服务器,来获取token)
CODE = "023tA6DW1eYZoY0g0JzW1bY5DW1tA6DK"

四、封装接口

在api下创建ego_api.py项目,根据API文档编写如下格式的代码,封装所有待测试接口。

# 导入requests模块
import requests
import app
# 创建API接口类
class EgoApi:

    def __init__(self):
        # 定义轮播图的url
        self.banner_url = app.BASE_URL + "/api/v1/banner/1"
        # 定义专题栏位的url
        self.theme_url = app.BASE_URL + "/api/v1/theme"
        # 最近新品的URL
        self.recent_product_url = app.BASE_URL + "/api/v1/product/recent"
        # 获取商品分类url
        self.category_url = app.BASE_URL + "/api/v1/category/all"
        # 获取商品分类下的某个商品
        self.by_category_url = app.BASE_URL + "/api/v1/product/by_category"
        # 获取商品详情
        self.product_detail_url = app.BASE_URL + "/api/v1/product"
        # 获取用户订单列表
        self.order_list_url = app.BASE_URL + "/api/v1/order/by_user"
        # 创建订单URL
        self.create_order_url = app.BASE_URL + "/api/v1/order"
        # 查看订单详情
        self.order_detail_url = app.BASE_URL + "/api/v1/order"
        # 获取Token
        self.get_token_url = app.BASE_URL + "/api/v1/token/user"
        # 验证token的url
        self.verify_token_url = app.BASE_URL + "/api/v1/token/verify"
        # 获取地址信息的URL
        self.get_address_url = app.BASE_URL + "/api/v1/address"
    # 轮播图
    def get_banner(self):
        return requests.get(self.banner_url)

    # 专题栏位
    def theme(self, params):
        return requests.get(self.theme_url, params={"ids":params})

    # 最近新品
    def recent_product(self):
        return requests.get(self.recent_product_url)

    # 获取商品分类
    def get_product_category(self):
        return requests.get(self.category_url)

    # 获取商品分类下的某个商品
    def by_category(self, params):
        return requests.get(self.by_category_url, params={"id":params})

    # 获取商品信息
    def get_product_detail(self, product_id):
        return requests.get(self.product_detail_url + "/" + str(product_id))

    # 获取用户订单列表(登录后的接口)
    def get_order_list(self, page):
        return requests.get(self.order_list_url, params={"page":page}, headers=app.HEADERS)

    # 创建订单
    def create_order(self, jsondata):
        return requests.post(self.create_order_url, json=jsondata, headers=app.HEADERS)

    # 查看订单
    def get_order_detail(self, order_id):
        return requests.get(self.order_detail_url + "/" + str(order_id), headers=app.HEADERS)

    # 获取Token
    def get_token(self, code):
        return requests.post(self.get_token_url, json={"code": code})

    # Token验证接口
    def verify_token(self, token):
        return requests.post(self.verify_token_url, json={"token": token})

    # 获取地址信息
    def get_address(self):
        return requests.get(self.get_address_url, headers=app.HEADERS)

五、编写测试用例

在script下创建test_ego.py文件,根据接口测试用例文档编写测试代码,以下代码为正向测试用例示例。

import unittest
import logging
import app
from api.ego_api import EgoApi

class TestEgo(unittest.TestCase):

    def setUp(self):
        # 手动设置token
        app.HEADERS["token"] = ""

    @classmethod
    def setUpClass(cls):
        cls.ego_api = EgoApi()

    def test01_get_banner_success(self):
        # 使用实例化的ego_api发送获取轮播图的接口请求
        response = self.ego_api.get_banner()
        # 打印响应数据
        logging.info("正向用例获取轮播图的测试结果为:{}".format(response.json()))
        # 断言结果
        self.assertEqual(200, response.status_code)
        self.assertEqual("首页轮播图", response.json().get("description"))

    def test02_get_theme_success(self):
        response = self.ego_api.theme("1,2,3")
        logging.info("正向用例获取专题栏位的测试结果为:{}".format(response.json()))
        self.assertEqual(200, response.status_code)
        self.assertEqual("专题栏位一", response.json()[0].get("name"))

    def test03_get_recent_product(self):
        response = self.ego_api.recent_product()
        logging.info("测试获取最近新品接口:{}".format(response.json()))
        self.assertEqual(200, response.status_code)
        self.assertEqual("芹菜 半斤", response.json([0].get("name")))

    def test04_get_product_category(self):
        response = self.ego_api.get_product_category()
        logging.info("测试获取商品分类接口:{}".format(response.json()))
        self.assertEqual(200, response.status_code)
        self.assertEqual("果味", response.json([0].get("name")))

    # 获取商品分类下的商品
    def test05_get_product(self):
        # 使用封装的接口获取商品分类下的商品
        response = self.ego_api.by_category(2)
        # 打印结果
        logging.info("获取商品分类下的商品为:{}".format(response.json()))

        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual("梨花带雨 3个", response.json()[0].get("name"))

    # 获取商品详情
    def test06_get_product_detail(self):
        # 使用封装的接口获取商品详情
        response = self.ego_api.get_product_detail(2)
        # 打印结果
        logging.info("获取商品商品详情:{}".format(response.json()))

        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual("梨花带雨 3个", response.json().get("name"))

六、生成测试报告

在run_suite.py文件中编写如下代码,可生成测试报告。

# 导包
import unittest
import app
from script.test_ego import TestEgo
from lib.HTMLTestRunner import HTMLTestRunner
# 创建测试套件
suite = unittest.TestSuite()
# 将测试用例的代码添加到测试套件中
suite.addTest(unittest.makeSuite(TestEgo))
# 定义测试报告的路径和名称
report_name = app.BASE_DIR + "/report/mini.html"
# 使用HTMLTestRunner运行测试套件生成测试报告
with open(report_name, 'wb') as f:
    # 初始化HTMLTestRunner
    runner = HTMLTestRunner(f, verbosity=1, title="Ego微商", description="测试Ego微商的常见接口")
    # 使用实例化的runner运行测试套件,并生成测试报告
    runner.run(suite)

七、运行结果

1、日志结果如下:

【Unittest】Requests实现小程序项目接口测试,unittest,python,接口测试,自动化测试

2、测试报告结果如下(生成的测试报告位于report文件夹下):

【Unittest】Requests实现小程序项目接口测试,unittest,python,接口测试,自动化测试文章来源地址https://www.toymoban.com/news/detail-708985.html

到了这里,关于【Unittest】Requests实现小程序项目接口测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【接口自动化测试项目2.0】unittest与pytest无缝穿插对接,可以像postman一样编写代码

    📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢交流讨论:欢迎加入我们一起学习! 📢资源分享:耗时200+小时精选的「软件测试」资料包 📢 最困难的时候,也就是我们离成功不远的时候! 接口自动化测试项目2.0 本框架主要是基于

    2024年02月03日
    浏览(58)
  • 接口测试 react+unittest+flask 接口自动化测试平台

    目录 1 前言 2 框架 2-1 框架简介 2-2 框架介绍 2-3 框架结构 3 平台 3-1 平台组件图

    2024年02月16日
    浏览(48)
  • 一文揭秘利用python+unittest实现Webscoket协议接口测试_from websocket import create_connection

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新软件测试全套学习资料》

    2024年04月23日
    浏览(29)
  • Python接口自动化之unittest单元测试

    以下主要介绍unittest特性、运行流程及实际案例。 一、单元测试三连问 1、 什么是单元测试?   按照阶段来分,一般就是单元测试,集成测试,系统测试,验收测试。单元测试是对 单个模块 、 单个类 或者 单个函数 进行测试。 将访问接口的过程封装在函数里面; 接口测试就

    2024年02月07日
    浏览(47)
  • react+unittest+flask 接口自动化测试平台

    目录 1 前言 2 框架 2-1 框架简介 2-2 框架介绍 2-3 框架结构 3 平台 3-1 平台组件图 1 新建用例 2 生成测试任务 3 执行并查看测试报告

    2024年02月17日
    浏览(47)
  • 如何编写接口自动化框架系列之unittest测试框架的详解(二)

    在编写自动化框架过程中 ,我们首先想到的就是选择一个合适的测试框架 ,目前常用的测试框架有unittest和pytest , unittest比较简单,适合入门着学习 ;而pytest比较强大,适合后期进阶 。本文主要介绍的就是unittest框架 。接下来 ,我们从以下三个问题开始说明: unittest是什么

    2024年02月07日
    浏览(59)
  • python接口自动化测试 —— unittest框架suite、runner详细使用

    测试套件,理解成测试用例集 一系列的测试用例,或测试套件,理解成测试用例的集合和测试套件的集合 当运行测试套件时,则运行里面添加的所有测试用例 测试运行器 用于执行和输出结果的组件 使用测试套件时,测试用例的执行顺序可以自定义,按照添加的顺序执行 有

    2024年03月16日
    浏览(86)
  • po+selenium+unittest自动化测试项目实战

    1、新建一个包名:common(用于存放基本函数封装) (1)在common包下新建一个base.py文件,作用:页面操作封装。base.py文件代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

    2024年01月17日
    浏览(47)
  • 震惊!强大的接口自动化测试框架2.0,unittest与pytest无缝穿插对接,可以像postman一样编写代码

    接口自动化测试项目2.0 本框架主要是基于 Python + unittest + ddt + HTMLTestRunner + log + excel + mysql + 企业微信通知 + Jenkins 实现的接口自动化框架。 项目参与者: 陈勇志 技术支持邮箱: 262667641@qq.com 个人微信: Testing_player 个人博客地址: https://home.cnblogs.com/u/Nephalem-262667641 微信公众号:测

    2024年02月12日
    浏览(44)
  • Unittest单元测试之unittest用例执行顺序

    当在一个测试类或多个测试模块下,用例数量较多时,unittest在执行用例 (test_xxx)时,并不是按从上到下的顺序执行,有特定的顺序。 unittest框架默认根据ACSII码的顺序加载测试用例,数字与字母的顺序为: 0~9,A~Z,a~z。 对于类来说,class TestAxx 会优先于class TestBxx被执行。

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包