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

xiaoxiao2025-04-22  13

之前分享过一期unittest单元测试框架下面的断言心得 断言【一】,今天再做些补充;

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

一)assertIn()

assertIn(member, container, msg=None) 判断是字符串是否包含:member in container

例:

assertIn(“2” in “23”) 成功 assertIn(“1” in “23”) 失败

app有个情景是:在某搜索输入框,输入内容后,直接会显示出来搜索结果,我的思路是在结果里面去寻找是否有搜索内容

# 搜索框 输入0,用户名包含0的被过滤出来 self.xin_find_element(By.ID, self.sousuo_id).send_keys('0') time.sleep(1) # 显示的用户的text属性值 是含有0的 self.assertIn('0', self.xin_find_element(By.ID, 'id/name').get_attribute('text')) print('断言通过')

二)assertIsNotNone()

assertIsNotNone(obj, msg=None) 判断是否 不为None:obj is not None

app有个情景,在某个界面做了修改,点击完成,返回前面的页面,某些选项的text就有了属性值;我的思路是在设置后返回的页面,对于那个属性值做是否为空得判断(最初没有值,做个断言;设置后 有值,再做个断言);

# 未设置开始时间时 这个属性的text为空 self.assertIsNone(self.xin_find_element(By.ID, 'id/action_begin_time').get_attribute('text'), '有问题,不是空') # 修改了开始时间 这个属性的text不为空 self.assertIsNotNone(self.xin_find_element(By.ID, 'id/action_begin_time').get_attribute('text'), '有问题,居然是空') print('断言通过')

三)分享到微信、朋友圈-切换app的断言分享

获取当前app的包名这个操作driver.current_package

self.xin_find_element(By.ID, self.shezhi_fenxiang_id).click() ddm_activity = self.driver.current_activity ddm_package = self.driver.current_package print('当前activity是: ', ddm_activity) print('当前package是: ', ddm_package) # 点击朋友圈(分享到微信) self.xin_find_element(By.ID, self.shezhi_fenxiang_peng_id).click() time.sleep(5) # 保证当前已经是微信app wechat_activity = self.driver.current_activity wechat_package = self.driver.current_package print('强制等待5秒后, 当前activity是: ', wechat_activity, ',当前package是: ', wechat_package) self.assertNotEqual(ddm_package, wechat_package) print('断言1 通过') self.assertNotEqual(ddm_activity, wechat_activity) print('断言2 通过') self.assertEqual(wechat_package, 'com.tencent.mm') print('断言3 通过')

这儿还有些小问题:分享到微博(没实践过),若是手机没有装微博app,会打开网页版的微博,那该如何做断言呢?

(202009更新:若我猜得没错,网页版微博,是H5界面,可以做个上下文的断言)

四)朋友圈评论-断言分享

len() 方法返回对象(字符、列表、元组等)长度或项目个数。

self.xin_find_element(By.ID, self.pengyouquan_pinglun_id).click() # 当前评论的条数 before = len(self.driver.find_elements(By.ID, 'id/tv')) print('未评论时:', before) # 输入新的评论、发送 self.xin_find_element(By.ID, self.pengyouquan_pinglun_shuru_id).send_keys('1230123') self.xin_find_element(By.ID, self.pengyouquan_pinglun_fasong_id).click() # 当前评论的条数 after = len(self.driver.find_elements(By.ID, 'id/tv')) print('评论过后:', after) print('len() 方法返回的是整数int类型 ') self.assertTrue(int(before) + 1 == int(after), '不可能错的') print('断言1 通过') self.assertTrue(before + 1 == after) print('断言2 通过')

这个例子分享出来,是因为之前犯过错:字符串和数字直接拼接,在Python之中是会报错的。所以特地做了int()转换,但是没想到 len()方法本身返回得就是int类型;

我理解中:断言,那就是要做个预期结果和实际结果的对比,方能知道你的操作是否成功;但又有个新问题,地图类的用例该如何做断言呢?好像 放大和缩小 可以断言比例尺(若没有比例尺呢?),待我想想再做分享。

后续:地图类 断言

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

转载请注明原文地址: https://www.6miu.com/read-5028877.html

最新回复(0)