1023Appium app自动化测试经验分享-使用unittest框架的断言心得(一)

目前我写的app自动化测试脚本 用的是unittest单元测试框架,在基本完成用例设计后,开始考虑如何来做断言;(虽然学习一段时间的自动化,但用例基本不做断言,除了登录后的拿用户名验证登录的成功与否)。基础知识我就不做分享,分享下我目前的经验。

个人博客:https://blog.csdn.net/zyooooxie

一)assertEqual()

assertEqual:如两个值相等,则pass
assertEqual:如两个值不相等,则fail

self.assertEqual(4 + 5,9,‘The result is False’)

self.assertEqual(self.xin_find_element(By.ID, self.name_id).get_attribute('name'), self.DY_name[1])

代码的意思为:找到的某元素的name字段值 和我预期的 一致。
我这样写,是有个前提:要先找到元素!

二)assertTrue()

assertTrue:判断bool值为True,则pass
assertTrue:判断bool值为False,则fail

self.assertTrue(4 + 5 == 9,“The result is False”)

但是网上有些教程推荐这儿来做 判断元素存在与否,写法:self.assertTrue(self.driver.find_elemnt_by_xx(‘xxxx’).XXXX)

XXXX 是 isEnable()检查元素是否被启用 isDisplay()检查元素是否可见

但是我有些疑问:
1.断言中 查找这个元素是否需要等待,时间太短没找到 怎么办?
2.若是 不存在的元素,实际这条用例的结果是怎么样的?

答:
1.可以使用显式等待来做智能等待;
2.结果是 selenium.common.exceptions.NoSuchElementException。就是说你想要的元素没找到,给的结果不是断言的结果

(个人理解)HTMLTestRunner生成的测试报告,有三个不同结果:通过(pass),失败(fail),错误(error)
在这里插入图片描述

三)断言:某些新界面的某元素是否存在,不存在就自动截图;存在,就断言通过

    def duanyan_chazhaoyuansu(self, by, locator):
        duanyan = True
        
        try:
            self.xin_find_element(by, locator)
            print('找到元素,断言成功')
        except:
            self.driver.get_screenshot_as_file(
                r'D:\xxxxxx\ScreenShot\screenshot_' + time.strftime('%Y%m%d_%H%M%S') + '.png')
            duanyan = False

        if duanyan is True:
            self.assertTrue(duanyan, '断言错了,没找到元素')
        else:
            self.assertTrue(duanyan, '断言失败了,没找到元素')

xin_find_elemnt()使用显式等待;传入的by是common的By类;

这样写的好处是 如果元素找到了,直接 print(‘找到元素,断言成功’),断言通过;如果元素没找到,自动截图,没能通过断言,提示msg=‘断言失败了,没找到元素’。

四)反面举例:聊天记录被清空,返回会话界面,查找聊天记录的元素,做断言

    def test_03_d482k(self):
        """清空聊天记录"""
        # 在设置里面 清空聊天记录 确定后 返回会话
        self.wodehuodong()
        self.xin_find_element(By.ID, self.wode_jinruqunliao_id).click()
        self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_id).click()
        self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_qingkong_id).click()
        self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_qingkong_queding_id).click()
        self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_fanhui_id).click()
        
        duanyan = True
        try:
            self.xin_find_element(By.ID, 'message_chat_right_text_text')
            
            self.driver.get_screenshot_as_file(
                r'D:\xxxxx\ScreenShot\screenshot_' + time.strftime('%Y%m%d_%H%M%S') + '.png')
        except:
            duanyan = False
            print('没找到元素,能清空聊天记录,断言成功了')

        if duanyan is True:
            self.assertFalse(duanyan, '断言失败了,找到元素,实际聊天记录还有未清空掉的')
        else:
            self.assertFalse(duanyan, '居然找到元素了!!!')
        self.xin_print()

某聊天界面的某会话中,设置,选择-清空聊天记录,确定,返回会话界面。

duanyan = True

try 去寻找元素(那个id是定位 聊天记录)

如果查找到,自动截图,断言失败,msg='断言失败了(找到元素,实际聊天记录还有)

如果没找到,duanyan = False,直接print(‘没找到元素,能清空聊天记录,断言成功了’)

断言的新想法

这一部分是2020年9月和某位朋友交流后,我做的更新。

上面我都定义了一个叫做duanyan的变量,但我现在看来,有点没必要。

思路为:某些操作后,出现新界面,新界面的某元素是原本界面不会出现的,我以此来做断言(找到,断言成功;找不到,断言失败)

from selenium.webdriver.common.by import By

from selenium.common.exceptions import NoSuchElementException
import time

try:
    self.xin_find_element(By.ID, 'zyooooxie')
    print('显示等待,去寻找某元素;找到了,代表:断言成功')

except NoSuchElementException:
    print('显示等待,去寻找某元素;没找到,截图,主动抛出异常')

    self.driver.get_screenshot_as_file(
        r'D:\zyooooxie\ScreenShot\screenshot_' + time.strftime('%Y%m%d_%H%M%S') + '.png')

    raise AssertionError

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值