python单元测试步骤 requests+unittest

该文章仅仅是本人单元测试学习的总结复盘笔记,有错误还请多多指教

requests库的使用

  1. 创建一个py文件(test_demo/http_request.py),先使用python的requests 库来完成http请求并封装起来可以后续写单元测试进行导入
import requests
"""利用requests封装get和post请求"""

class HttpRequest():
   def http_request(self, url, data, method, cookie=None):
       """url: 请求地址 http://XXXX:port
       param: 传递参数,非必填参数,字典的格式传递参数
       method:请求方式 支持get 以及post 字符串形式的参数
       cookie:请求的时候传递的cookie值"""
       if method.lower() == "get":  # 判断请求方式是"get"并且是小写
           res = requests.get(url, data, cookies=cookie)  # 响应结果的消息实体
       else:
           res = requests.post(url, data, cookies=cookie)  # 响应结果的消息实体
       return res  # 返回一个消息实体

有关requests的学习网站:
链接: 快速上手 — Requests 2.18.1 文档
可以练手的开放API:
链接1: Apifox Echo
链接2: httpbin.org

unittest

  1. 创建编写用例的文件(test_demo/test_suite.py)
  2. 编写用例
import unittest  # 导入unittest 库
from test_demo.http_request import http_request # 导入上文所写的http_requests文件

COOKIE = None  # 设置全局变量

class TestHttp(unittest.TestCase):
     def setUp(self):
      	self.login_url = "https://xxx/sign_in"  # 登录页
        self.login_data = {"user[login]": "username", "user[password]": "password"}
        self.topics_url = "https://xxx/topics"  # 话题页  
        # 获取登录后的cookie (方法一)
        # self.cookies = HttpRequest().http_request(self.login_url, self.login_data, 'get').cookies

    def test_login_normal(self):  # 正常登录
    	global COOKIE  # 声明全局变量
        data = {"user": "user", "password": "812"}
        res = HttpRequest().http_request(self.login_url, data, 'post')  # 请求登录接口
        if res.cookies:  # 如果cookie有的话,就更新COOKIE(获取cookie方法二)
            COOKIE = res.cookies
        try:
            self.assertEqual(200, res.status_code)  # 断言,判断json里的'code'是否等于'200'
        except AssertionError as e:
            print("error is{}".format(e))
            raise e  # 有异常的情况需要抛出

    def test_login_wrong_pwd(self):  # 密码为空
        url2 = "https://testerhome.com/account/sign_in"
        data2 = {"user": "user", "password": " "}
        res_1 = HttpRequest().http_request(url2, data2, 'post')
        print(res_1.status_code)
        try:
            self.assertEqual(401, res.status_code)  # 断言,判断json里的'code'是否等于'401'
        except AssertionError as e:
            print("error is{}".format(e))
            raise e  # 有异常的情况需要抛出
    
    def test_get_topics(self):
        global COOKIE
        topics_res = HttpRequest().http_request(self.favorites_url, data=None, method='get', cookie=COOKIE)
        print(topics_res.text)  # 打印请求到的内容方便检查是否访问成功
        try:
            self.assertEqual(200, favorites_res.status_code)  # 断言,判断json里的'code'是否等于'200'
        except AssertionError as e:
            print("error is{}".format(e))
            raise e  # 有异常的情况需要抛出

    def tearDown(self):
        pass


if __name__ == '__main__':  # 只在当前文件生效的方法
    unittest.main() # 运行所有的case
  1. 存储,加载,运行测试用例
import unittest
import HTMLTestRunner  # 导入生产测试报告的库
# from test_demo.test_http import TestHttp  # 导入具体类 
from test_demo import test_http  # 导入具体模块

# 一、创建存储测试用例的容器
suite = unittest.TestSuite()  

#二、加载用例(有三种方式)
# suite.addTest(TestHttp("test_001"))  # 1.单独加载一条用例
loader = unittest.TestLoader()  # 先创建一个加载器
# 3.suite.addTest(loader.loadTestsFromTestCase(TestHttp))  # 2.加载类里面的用例
suite.addTest(loader.loadTestsFromModule(test_http))  # 3.加载模块里面的用例

# 三、执行用例并输出html报告:通过上下文管理器
with open("test_report.html", "wb", encoding="utf-8") as file: 
    runner = HTMLTestRunner.HTMLTestRunner(stream=file, verbosity=2, title=None, description=None)  # verbosity,2最详细
    runner.run(suite)
    
# 只执行用例不输出文件报告
# runner = unittest.TextTestRunner()
# runner.run(suite)

如果没有导入HTMLTestRunner 的情况想要输出测试报告,也可以选择直接修改文件后缀名生成文本测试报告(test_report.txt)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值