前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Appium系列(三十一)增加失败重试功能

Appium系列(三十一)增加失败重试功能

作者头像
雷子
发布2021-05-27 15:12:25
5200
发布2021-05-27 15:12:25
举报
前言

我们在执行测试的时候,肯定都会遇到错误,但是有时候的错误或者失败呢,不是因为我们自身的代码有问题,可能是因为环境 因素导致的我们出现失败的原因,为了降低这些失败,我们想要增加重试的功能。如何实现呢,本文带你解密

正文

在之前的文章unittest系统(八)一文搞定unittest重试功能,我们有分享过,这次呢,我们还是基于当时的代码进行改造。

首先我们在common创建一个trytest.py,代码如下

import  unittest
import  sys,copy
from io import StringIO as StringIO
TestResult = unittest.TestResult
class MyResult(TestResult):
    def __init__(self, verbosity=1, trynum=0):
        #默认次数是0
        TestResult.__init__(self)
        self.outputBuffer = StringIO()
        self.stdout0 = None
        self.stderr0 = None
        self.success_count = 0
        self.failure_count = 0
        self.error_count = 0
        self.verbosity = verbosity
        self.trynnum = trynum
        self.result = []
        self.trys=0#
        self.istry=False

    def startTest(self, test):
        TestResult.startTest(self, test)
        self.stdout0 = sys.stdout
        self.stderr0 = sys.stderr

    def complete_output(self):
        if self.stdout0:
            sys.stdout = self.stdout0
            sys.stderr = self.stderr0
            self.stdout0 = None
            self.stderr0 = None
        return self.outputBuffer.getvalue()

    def stopTest(self, test):
        #判断是否要重试
        if self.istry is True :
            #如果执行的次数小于重试的次数 就重试
            if self.trys < self.trynnum :
                #删除最后一个结果
                reslut = self.result.pop(-1)
                #判断结果,如果是错误就把错误的个数减掉
                #如果是失败,就把失败的次数减掉
                if reslut[0] == 1:
                    self.failure_count -= 1
                else:
                    self.error_count -= 1
                sys.stderr.write('{}:用例正在重试中。。。' .format(test.id())+ '\n')
                #深copy用例
                test = copy.copy(test)
                #重试次数增加+1
                self.trys += 1
                #测试
                test(self)
            else:
                self.istry=False
                self.trys =0
        self.complete_output()

    def addSuccess(self, test):
        #成功就不要重试
        self.istry = False
        self.success_count += 1
        TestResult.addSuccess(self, test)
        output = self.complete_output()
        self.result.append((0, test, output, ''))
        if self.verbosity > 1:
            sys.stderr.write('ok ')
            sys.stderr.write(str(test))
            sys.stderr.write('\n')
        else:
            sys.stderr.write('.')

    def addError(self, test, err):
        #重试+1,错误次数+1
        self.istry = True
        self.error_count += 1
        TestResult.addError(self, test, err)
        _, _exc_str = self.errors[-1]
        output = self.complete_output()
        self.result.append((2, test, output, _exc_str))
        if self.verbosity > 1:
            sys.stderr.write('E  ')
            sys.stderr.write(str(test))
            sys.stderr.write('\n')
        else:
            sys.stderr.write('E')

    def addFailure(self, test, err):
        self.istry = True
        TestResult.startTestRun(self)
        self.failure_count += 1
        TestResult.addFailure(self, test, err)
        _, _exc_str = self.failures[-1]
        output = self.complete_output()
        self.result.append((1, test, output, _exc_str))
        if self.verbosity > 1:
            sys.stderr.write('F  ')
            sys.stderr.write(str(test))
            sys.stderr.write('\n')
        else:
            sys.stderr.write('F')

    def stop(self) -> None:
        pass

那么我们去改造我们的代码。在run.py中改造。

首先引入我们的模块

from  common. trytestnum import *

接下来就是改造runnerCaseApp。

def runnerCaseApp(devices):
    '''利用unittest的testsuite来组织测试用例'''
    newtry = MyResult(trynum=3)
    test_suit = unittest.TestSuite()
    test_suit.addTest(Parmer.parametrize(testcase_klass=testCase, parame=devices))  # 扩展的其他的测试用例均这样添加
    test_suit.run(newtry)

然后就可以执行了。

所有的代码放在了下面的链接

https://gitee.com/liwanlei/appiumdemo

有问题欢迎找我私聊。大家一起学习,一起进步。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档