Appium python 自动化测试,求助:如何判断用例断言失败后自动截图。目前的想法是在 tearDown 中加个判断,但如何判断断言失败?另看了大佬关于装饰器,没看懂。。。

皆非 · 2017年10月30日 · 最后由 皆非 回复于 2018年06月08日 · 4312 次阅读
pytest.allure.attach(name, self.driver.get_screenshot_as_png(), type=AttachmentType.PNG)

pytest 以上

uinttest 写个 装饰器

game over

共收到 17 条回复 时间 点赞

我的做法是把断言方法封装一下,例如 verify(button.title, 'register')
如果 button.title == register, 测试通过,然后截图,保存到正常截图的目录,作为测试执行成功的记录;
如果 button.title != register, 测试失败, 并且截图保存到失败的目录,方便检查执行失败的记录。
另外如果执行过程中出错(不是断言,而是其他执行的步骤,如找不到元素),也字段截图保存。

Jerry li 回复

请教 能否参考下断言的封装 我之前也想过断言的封装,但是没成功。初学者
另外,为啥成功了 还要去截图呢?

  1. 如何封装断言,可以参考下面的帖子:
    https://testerhome.com/topics/8883

  2. 成功了也截图,是有时候执行后需要看对应的结果,如果你不需要就不用截了

Jerry li 回复
try:
     self.assertTrue(self.driver.find_element_by_name(u'xxxxxx'))
except Exception as msg:
      print (msg)
      public.screenshot("error.png")

1.这个帖子我有看过,如果你说的是 try 捕获异常截图,这样的话断言失败截图功能实现了,但是这条用例显示是 pass
2.这个帖子下面有个装饰器,不知道大佬是否研究过,搞了半天没搞定装饰器的用法。我用的是 python3

皆非 回复

def verify(a, b):
if a == b :
result = 1
else :
result = 0
driver.screenshot("fail.png")

类似这样就可以了, 就是看你想要什么时候去做截图(上面 try 的例子是异常截图, 我的例子是验证失败的时候截图)

皆非 回复
try:
     self.assertTrue(self.driver.find_element_by_name(u'xxxxxx'))
except Exception as msg:
      public.screenshot("error.png")
      raise msg // 抛出异常这个用例就不会pass了

如果想要不管成功还是失败都截图,

try:
     self.assertTrue(self.driver.find_element_by_name(u'xxxxxx'))
except Exception as msg: 
      raise msg // 抛出异常这个用例就不会pass了
finally
       public.screenshot("error.png")

装饰器还是方便些

感谢。找到了方法!

皆非 #10 · 2017年10月31日 Author
笑哼 回复

装饰器这个不理解。还需要多学习研究。

皆非 #11 · 2017年10月31日 Author
def tearDown(self):
    result = self.defaultTestResult() 
    self._feedErrorsToResult(result, self._outcome.errors)
    error = self.list2reason(result.errors)
    failure = self.list2reason(result.failures)
    ok = not error and not failure
    if not ok:
        BasePage.Action(self.driver).save_screenshot()
    self.driver.quit()

def list2reason(self, exc_list):
    if exc_list and exc_list[-1][0] is self:
        return exc_list[-1][1]

这个方法我试过,不是我想要的。 我在其他地方找到了 #11 方法,试用了下还可以。
接下来还是要研究装饰器

皆非 #13 · 2017年10月31日 Author
Jerry li 回复

感谢。目前找到了 #11 方法,回头还是要研究装饰器

匿名 #13 · 2017年11月01日
皆非 回复

嗯,我这里只是帮你解决你上面这样 try except 截图实现问题,teardown 也有问题,你每次都退出服务,也就是说每个用例都是单独的,如果我想不管成功失败,都继续执行的话,你这样写也是有问题的,可以考虑 teardownClass

我用的 pytest 框架,可以配置失败截图,网上可以找到

皆非 关闭了讨论 11月11日 23:21
皆非 重新开启了讨论 06月04日 01:12
皆非 #18 · 2018年06月04日 Author
chma 回复

老哥,现在也在使用 pytest 但是网上看了下 pytest 失败后如何截图哇,求教

皆非 #19 · 2018年06月08日 Author
pytest.allure.attach(name, self.driver.get_screenshot_as_png(), type=AttachmentType.PNG)

话题终止

皆非 关闭了讨论 06月08日 17:50
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册