游戏测试 浅谈测试开发工具链环节 (三种常见机制)

陈子昂 for 公开课 · 2019年01月24日 · 最后由 simple 回复于 2019年01月25日 · 3531 次阅读

工具链

会把业务线和 CI 线上的内容进行打通,打通包含考虑到一些异常情况,让异常情况分类处理及时。
因为这块工具链也没必要做 1 个短信接入报警系统。
但是有必要做【熔断机制】和【发现到解决处理】或者【切换其他分支】继续使用。

业务例子 - 熔断

比如自动化数据驱动回写数据,但是 excel 比如忘记关闭了,就会导致自动化在写入的时候失利,导致大量错误,费时力。
os 库只提供了系统级别的权限,并没有直接支持的。
我们先写一个函数体 if_condition()

#util/Base.py
    def if_condition(self):
        """
        验证excel是否支持回写,验证拦截条件
        :return:
        """
        if os.access(self.xlsx_path,os.X_OK): #X_OK可执行权限
            try:
                wb = openpyxl.load_workbook(set._xlsx_path)
                wb.save(self.xlsx_path)
                closed =True
            except PermissionError:
                closed =False
            return closed

这部分逻辑最好不要放在单元测试框架的 setup_class 的函数内,可以放到 run 文件里,道理是一样的。

#util/Base.py
if not base.if_condition(): #base库下面的一个函数名
    print("请检查excel是否已打开,添加邮件功能")
    return

如果是放在 main 区域,而不是 1 个函数体,return 不行,注意 return 本身熔断效果不高。

#run.py 
if __name__ == '__main__':
    if not Base().if_condition():
        print("请检查excel是否已打开,添加邮件功能")
        sys.exit(0) #熔断
    pytest.main([testdir,'-s', '-q', '--alluredir',"./allure-result"]) #需要安装环境变量的allure
    if gen_report(resultdir,reportdir):#函数把xml创建报告后,把xml mov到对应区域
        省略 

业务例子 - 切换到处理

这个例子直接熔断太傻了,因为是可以自行处理的。
第一步先把.if_condition() 可以不对外,在写 1 个函数包住他。无视是 wins 的,mac 等,只要判断个平台在自动判断执行就行了。

#util/Base.py
    def excel_close(self):
        """
        检查excel物理是否关闭,然后关闭掉
        :return:
        """
        if not self.if_condition():
            work =os.popen('tasklist /FI "IMAGENAME eq EXCEL.exe"').read()
            print(work) #可以打印
            res =os.system('TASKKILL /F /IM EXCEL.exe')
            if res ==0:print("ok")
        if self.if_condition():#再次验证
            return True

以上代码使用了 python 内置特性 os.system,如果执行前已经关掉了不会发生任何事。
这个例子最好的做法是【发现到解决处理】,run 文件尽量精简

#run.py 
if __name__ == '__main__':
    if Base().excel_close(): #之前函数修改为这个  自动化条件判断  
        pytest.main([testdir,'-s', '-q', '--alluredir',"./allure-result"])
    if gen_report(resultdir,reportdir):
        省略 

补充思考

【熔断机制】比如打包,装饰器重执行后,n 次打包失败,根据打包日志自动解析的反馈采取熔断机制邮件给对应开发者群组。
【发现到解决处理】同样比如 appium 自动化,appium 的 sessions 走的是 web 传输,如果 get 或者 curl 固定 url,里面的 status 不为 0 了。也可以对应处理。
【切换其他分支】比如自动化依赖修改一些对象的值(不同场景用深浅拷贝),继续往下,但对象文件丢失或者写入失败。需要在另外 1 个地方预备另外一套方式可以切换过去。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

熔断有意思

这个熔断考虑的很好

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册