IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 自动化测试项目实战07:跳过 -> 正文阅读

[开发测试]自动化测试项目实战07:跳过

大家好,我是谭叔。

经历过几期学习,你是否已感到疲惫?

如果是,谭叔建议你休息一天,再阅读一遍01-06,实操动手练习下。

本期,谭叔讲个看起来简单,其实也不那么简单的内容——跳过用例执行。

在实际的接口测试中,如果某条用例不满执行条件,我们无需执行它。举个例子,A用例和B用例时依赖用例,即B用例依赖于A用例执行成功,而当A用例执行失败后,B用例执行也会失败(不是因为本身失败,而是因为A导致的)。

于是,在最终的用例执行统计中,B被统计成失败用例,然而却并不是这样。

针对这种情况,在unittest中,你可以使用skip跳过执行。

基础跳过

unittest默认的有四种跳过方式(以装饰器实现)。

skip的使用很简单,如图所示。代码我也贴在了项目中,你可以执行试一试,理解skip装饰器的用法。

image-20210603201414069

回到之前的实操中,我们是不是遇到过这种场景:

如果test_add_department_001用例(新增T01学院)执行失败,test_add_department_002(重复新增T01学院)没必要再执行。

此时,我们需要跳过test_add_department_002。

但是,unittest的这四种skip方式无法满足我们的需求,因为skip无法以用例作为入参。

该怎么办?

封装跳过

在common文件夹下,新建一个wrapers.py文件,用来封装跳过方法。

image-20210603201430204

# !/usr/bin/python
# -*- coding:utf-8 -*-
import unittest
from functools import wraps

def skip_related_case(related_case_name=''):
    """
    AB关联用例
    如果A用例跳过执行、执行报错、断言失败,则B用例不执行
    :param related_case_name: 关联用例A的名字
    :return:
    """
    def wraper_func(func):
        @wraps(func)
        def inner_func(*args, **kwargs):
            fail_cases = str([fail[0] for fail in args[0]._outcome.result.failures])
            error_cases = str([error[0] for error in args[0]._outcome.result.errors])
            skip_cases = str([error[0] for error in args[0]._outcome.result.skipped])
            if (related_case_name in fail_cases):
                reson = "{}断言失败,跳过执行{}用例".format(related_case_name, func.__name__)
                test = unittest.skipIf(True, reson)(func(*args, **kwargs))
            elif (related_case_name in error_cases):
                reson = "{}执行报错,跳过执行{}用例".format(related_case_name, func.__name__)
                test = unittest.skipIf(True, reson)(func(*args, **kwargs))
            elif (related_case_name in skip_cases):
                reson = "{}跳过未执行,跳过执行{}用例".format(related_case_name, func.__name__)
                test = unittest.skipIf(True, reson)(func(*args, **kwargs))
            else:
                test = func
            return test(*args, **kwargs)
        return inner_func
    return wraper_func

回到用例类,尝试给test_add_department_002装饰上我们刚刚创建的skip_related_case方法。

    @skip_related_case('test_add_department_001')
    def test_add_department_002(self):
        """重复新增T01学院"""
        result = ETReq.post(url=ETConfig.URL,
                            data=json.dumps({"data":[{"dep_id":"T01","dep_name":"Test学院","master_name":"Test-Master","slogan":"Here is Slogan"}]}))
        # 判断请求结果
        result = json.loads(result.text)
        self.assertEqual(result['already_exist']['count'], 1)

运行用例集,我们可以在控制台看到:

因为test_add_department_001断言失败,故test_add_department_002被跳过,无需执行,达成了我们的目的。

image-20210603195105597

一如既往,做个总结

unittest是python的基础库,能满足我们做自动化测试的大部分场景,但,仍旧有很多场景无法满足我们的需求。我们要做的是理解unittest的运行机制,做封装,或者选择其他框架,一切以多快好省的达到测试目的为准则。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-30 12:30:37  更:2021-08-30 12:31:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:46:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码