python接口自动化测试(单元测试方法)

一、环境搭建

  • python +unittest+ requests实现http请求的接口自动化
  • Python的优势:语法简洁优美, 功能强大, 标准库跟第三方库灰常强大,建议大家事先了解一下Python的基础;
  • unittest是python的标准测试库,相比于其他测试框架是python目前使用最广的测试框架。
  • Requests 是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP 库。它比urllib 更加方便,可以节约我们大量的工作,完全满足HTTP 测试需求。
  • 在CMD命令行执行命令加载request第三方库:pip install requests
  • python -m pip install pillow

二、方法

  • pip安装requests第三方库,然后引入:import requests

  • 引入json标准库,美化json输出:import json

  • 调用requests库中的post方法,会给出所需要的参数,传入上面定义的url和data参数,运行.py文件就执行了post请求。

    import requests #pip安装requests第三方库,然后引入
    import json #引入json标准库,美化json输出

    url = 'http://***/account/login'
    data = {
    "username":"***01",
    "password":"password",
    }

    result = requests.post(url,data).json() #以json格式输出
    print(result)
    result = requests.post(url,data).text #以源码形式输出
    print(result)

    import requests#引入requests第三方包
    import json#引入json包

    class Login():
    def httprequests(self,url,data,method):#self为类函数的默认函数,放在第一位
    if method=="post":
    res=requests.post(url,data)#post请求方法
    else:
    res=requests.get(url,data)#get请求方法
    print(res.text)#以源码形式输出
    print(res.json())#以json形式输出

    #创建实例,调用函数
    test1=Login()
    login_url='https://www./pc/member/sign'
    login_data={"flag":"mobile",
    "password":"f5e05a41724115d076bfb1fd2bd9613e",
    "mobile_phone":"136
    **"}
    login_method='post'
    test1.httprequests(login_url,login_data,login_method)

三、单元测试

  • 什么是单元测试:单元测试就是对代码进行测试,本质就是对类或者函数进行测试
  • 什么时候进行单元测试:代码完成后就开始进行测试
  • 由谁进行单元测试:一般有开发自己进行测试
  • 目的:尽可能早的介入测试,发现底层代码中的问题
  • 方法:使用unittest方法包:import unittest

(1)先创建一个加法类-Mathmethod,存入Mathmethod.py文件

复制代码
#定义一个数学加法类
class Mathmethod():
    def add(self,a,b):
        return(a+b)
    def sub(self,a,b):
        return(a-b)

(2)然后创建测试用例-TestMathmethod

复制代码
import unittest
from HTMLTestRunner import HTMLTestRunner
from requesttest.math.Mathmethod import Mathmethod  # 引入Mathmethod模块
#import HTMLTestRunnerNew


class TestMathmethod(unittest.TestCase):#创建TestMathmethod类,继承unittest.TestCase方法
    #编写测试用例,函数命名必须以test_开头
    def test_add_two_num(self):
        res=Mathmethod().add(3,6)
        print('两个数值相加结果是',res)
        self.assertEqual(9,res)

    def test_sub_two_num(self):
        res=Mathmethod().sub(9,8)
        print('两个数值相减结果是', res)
        self.assertEqual(1,res)

(3)创建测试报告-使用HTML方法

复制代码
import unittest
from HTMLTestRunner import HTMLTestRunner
from requesttest.math.TestMathmethod import TestMathmethod


testunit=unittest.TestSuite()#生成单元测试流程
testunit.addTest(TestMathmethod("test_add_two_num"))
testunit.addTest(TestMathmethod("test_sub_two_num"))#加载一条测试用例
fp=open('D:\\test\\unittest1.html','wb')#创建测试报告,以写的方式存入某个路径
runner=HTMLTestRunner(
    stream=fp,
    title="加法测试",
    description="用例执行情况:"
    )
runner.run(testunit)
fp.close()

(4)也可使用txt的形式输出测试报告

复制代码
import unittest
from HTMLTestRunner import HTMLTestRunner
from requesttest.math.TestMathmethod import TestMathmethod

suite=unittest.TestSuite()#收集测试用例
loader=unittest.TestLoader()#加载测试用例-按照类的方法添加一个类下面的所有测试用例
suite.addTest(loader.loadTestsFromTestCase(TestMathmethod))
file=open('test_case.txt','w+')#测试报告的存储路径和测试报告的读写方式
runner=unittest.TextTestRunner(
    stream=file,
    verbosity=2,#测试报告的详细程度
)
runner.run(suite)#执行测试用例

test_add_two_num (requesttest.math.TestMathmethod.TestMathmethod) ... ok
test_sub_two_num (requesttest.math.TestMathmethod.TestMathmethod) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
复制代码
(5)生成测试报告方法三(HTML的方式)
复制代码
import unittest
from HTMLTestRunner import HTMLTestRunner
from requesttest.math.TestMathmethod import TestMathmethod

suite=unittest.TestSuite()#收集测试用例
loader=unittest.TestLoader()#加载测试用例
suite.addTest(loader.loadTestsFromTestCase(TestMathmethod))

fp=open('D:\\test\\unittest1.html','wb')#创建测试报告,以写的方式存入某个路径
runner=HTMLTestRunner(
    stream=fp,
    title="加法测试",
    description="用例执行情况:"
    )
runner.run(suite)
fp.close()

Python接口自动化测试零基础入门到精通(2023最新版)

相关推荐
weixin_307779131 分钟前
Jenkins Ioncions API 插件:现代化图标库在持续集成中的应用
java·运维·开发语言·前端·jenkins
AnAnCode3 分钟前
【时间轮算法】时间轮算法的详细讲解,从基本原理到 Java 中的具体实现
java·开发语言·算法·时间轮算法
天草二十六_简村人4 分钟前
jenkins打包制作Python镜像,并推送至docker仓库,部署到k8s
后端·python·docker·容器·kubernetes·jenkins
weixin_457760005 分钟前
GIOU (Generalized Intersection over Union) 详解
pytorch·python
汐ya~5 分钟前
Cursor连接异常问题“Model not available/connection failed”解决:IDE内置代理配置,无需全局流量代理与虚拟网卡
python·编辑器·cursor
JIngJaneIL7 分钟前
基于Java二手交易管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot
ULTRA??7 分钟前
C++类型和容器在MoonBit中的对应关系整理
开发语言·c++·rust
李白同学8 分钟前
C++:queue、priority_queue的使用和模拟实现
开发语言·c++
海市公约12 分钟前
Python操作SQLite数据库:从基础语法到完整项目实战
数据库·ide·python·程序人生·架构·pycharm·sqlite
轻竹办公PPT12 分钟前
学校要求开题报告 PPT,有没有模板?
人工智能·python·powerpoint