栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

〖Python接口自动化测试实战篇⑫〗- 实战 - unittest框架之用例组织

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

〖Python接口自动化测试实战篇⑫〗- 实战 - unittest框架之用例组织

点击下方图片有惊喜,精美礼品等你来拿哦


前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 TFS 赋能的博主 ✌
CSDN博客专家认证、新星计划第三季全栈赛道 top_1 、华为云享专家、阿里云专家博主 
 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。
 如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦


专栏系列(点击解锁)学习路线指引知识定位
Python全栈白皮书 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。
语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。
自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。
自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。
数据库开发实战篇 更新中
爬虫入门与实战 更新中
数据分析篇 更新中
前端入门+flask 全栈篇 更新中
django+vue全栈篇 更新中
拓展-人工智能入门 更新中
网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者
网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。
vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。
shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结]
WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器
测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得!
测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。
RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。
Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。
MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。


文章目录
    •  利用 Test Fixtures 实现用例组织示例
    •  注册接口Case 与 登录接口 Case 的用例组织演示案例

上一章节学习了 unittest 框架的断言,今天我们就来继续学习测试用例的组织。在我们进行接口测试的组织的时候(其实不仅仅是接口,后面的 WEB - UI 自动化、APP自动化的 测试组织 使用 unittest 的方式都是一样的 ),有两种模式。

第一种:在用例模块内的组织,在一个类内规定或者说通过 unittest 的组织方式决定哪些用例、哪些代码的执行次数。

第二种:用一些底层组件来组织测试用例,也就是组织真正的测试框架。

所以从小到大,先来了解一下用例自身的组织。

用例组织 在 unittest 中有一个专有名词 —> Test Fixtures ,翻译过来的话,叫做 用例包裹方法 。这个方法按照不同的作用有以下几种划分:

  • setUp:每个用例执行在执行之前执行一次。
  • tearDown:每个用例执行在执行之后执行一次。
  • setUpClass:每个测试类在加载之前执行一次。
  • tearDownClass:每个测试类在加载之后执行一次。
  • setUpModule:每个测试模块(其实就是python文件)加载之前执行一次。
  • tearDownModule:每个测试模块(其实就是python文件)加载之后执行一次。
 利用 Test Fixtures 实现用例组织示例

接下来我们以代码的运行结果来看看这些方法执行的顺序是什么样的。

实现用例组织示例代码如下:

import unittest


'''
Test Fixtures(用例包裹方法)
    按不同作用划分
    setUp/tearDown 每个用例执行前、后 执行一次
    setUpClass/tearDownClass 每个测试类加载前、后执行一次
    setUpModule / tearDownModule 每个测试模块(python文件)加载前、后 执行一次
'''


def setUpModule():
    print('~~~~ setUpModule - 在测试模块加载之前执行 ~~~~')


def tearDownModule():
    print('~~~~ tearDownModule - 在测试模块加载之后执行 ~~~~')

class TestClass1(unittest.TestCase):

    print('~~~~ 测试类 "TestClass1" 开始执行 ~~~~')

    @classmethod
    def setUpClass(cls):
        print('~~~~ setUpClass - 在测试类加载之前执行 ~~~~')

    @classmethod
    def tearDownClass(cls):
        print('~~~~ tearDownClass- 在测试类加载之后执行 ~~~~')

    def setUp(self):
        print('~~~~ setUp - 用例加载之前执行~~~~')

    def tearDown(self):
        print('~~~~ tearDown - 用例加载之后执行~~~~')

    def test_a(self):
        print('~~~~ 这是测试用例 "test_a" ~~~~')

    def test_b(self):
        print('~~~~ 这是测试用例 "test_b" ~~~~')


class TestClass2(unittest.TestCase):

    print('~~~~ 测试类 "TestClass2" 开始执行 ~~~~')

    def test_1(self):
        print('~~~~ 这是测试类 "TestClass2" 的测试用例 "test_1" ~~~~')


if __name__ == '__main__':
    unittest.main()

运行结果如下:



以上就是在实际工作中实现接口自动化测试用例的一种实现方式,就比如上一章节我们写的 旅游网的登录接口的测试Case ,在登录之前,我们需要先注册,然后才可以实现登录。这个时候就可以在登录接口的Case运行之前执行以下注册接口的实现。

实现场景:

  • 将注册实现的 Case、登录成功的 Case ,写成 setUpClass(),这样的话,注册实现的 Case 与 登录成功的 Case 就会只执行一遍。
  • 这样的话,后面执行的一些操作;比如查看用户信息、商品加入购物车、支付订单金额…等着这些 Case 的实现就可以在 注册、登录之后来完成。

所以这就是 用例组织 场景的实现的方法,在执行的时候让代码来判断让哪个 Case 只执行一次,让哪个 Case 来执行多次,这样的一种逻辑上的碰撞。

 注册接口Case 与 登录接口 Case 的用例组织演示案例

示例代码如下:

# coding:utf-8


import unittest
import requests


'''
Test Fixtures(用例包裹方法)
    按不同作用划分
    setUp/tearDown 每个用例执行前、后 执行一次
    setUpClass/tearDownClass 每个测试类加载前、后执行一次
    setUpModule / tearDownModule 每个测试模块(python文件)加载前、后 执行一次
'''


class TestLogin(unittest.TestCase):

    @classmethod
    def setUpClass(cls):        # 前置条件 - 注册账户成功Case
        phone = "13770001004"
        nick = "Husky_004"
        password = "123456"

        url_regis = "http://trip.imooc.zhaedu.com/api/accounts/user/register/"  # 注册API
        data_regis = {"username": phone, "nickname": nick, "password": password}  # 定义注册API传入信息
        res_regis = requests.post(url=url_regis, data=data_regis)
        print("登录Case前置条件 - 注册信息:", res_regis.text)

    def test_login(self):       # 登录成功Case
        phone = "13770001004"
        password = "123456"

        url_login = "http://trip.imooc.zhaedu.com/api/accounts/user/login/"  # 登录API
        data_login = {"username": phone, "password": password}  # 定义登录API传入信息
        res_login = requests.post(url=url_login, data=data_login)
        print("登录成功Case信息:", res_login.text)
        self.assertIn('Husky_004', res_login.text)      # 当用户昵称包含在返回的登录信息里,我们就认为该登录Case通过

    def test_login_abnormal(self):    # 登录失败Case
        phone = "13770001004"
        password = "12345678"         # 密码不正确

        url_login = "http://trip.imooc.zhaedu.com/api/accounts/user/login/"  # 登录API
        data_login = {"username": phone, "password": password}  # 定义登录API传入信息
        res_login = requests.post(url=url_login, data=data_login)
        print("登录失败Case信息:", res_login.text)
        # self.assertNotIn('Husky_004', res_login.text)      # 当用户昵称不包含在返回的登录信息里,我们就认为该登录失败Case通过
        self.assertIn("error_code", res_login.text)      # 当 "error_code" 包含在返回的登录信息里,我们就认为该登录失败Case通过


if __name__ == '__main__':
    unittest.main()

运行结果如下:



以上就是 利用 "Test Fixtures 实现用例组织" 的内容,你学废了吗?



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947270.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号