python+appium app真机测试(二)

问题一:反复重启
每次执行测试.py手机都会重启APP,然后需要重复授予权限,所以可以添加两句设定,让它在第一次启动后,再次执行测试不会再重启。

# 以下两句话可以实现每次测试时不用重复重启手机
        desired_caps['noReset'] = 'true'
        desired_caps['fullReset'] = 'false'

把这个话加到setup里面就可以了。

问题二:创建unittest框架
unittest单元测试框架不仅可以适用于单元测试,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。
python+appium app真机测试(二)_第1张图片
一开始需要先设置编码,然后注释本测试代码的各类信息,养成良好的习惯,然后导入测试框架包。
python+appium app真机测试(二)_第2张图片
① 创建测试类——父类为unittest.TestCase。继承unittest.TestCase的方法,如setUp和tearDown方法和各种断言方法。
② 定义测试用例,以“test_”开头命名的方法。方法的入参统一为self,可使用unittest.TestCase类下面的各种断言方法用于对测试结果的判断。可定义多个测试用例
定义setUp()方法用于测试用例执行前的初始化工作。后面的就是关于权限授予,登录等其他测试用例方法
③ **tearDown()**方法用于测试用例执行之后的善后工作。
④ 执行测试用例。
**unittest.main()**使用可以方便的将一个单元测试模块变为可直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行他们。执行方法的默认顺序是:根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行。

关于断言:
以登录方法为例——

    def test_2_signin(self):
        #登录
        print("准备登录!", flush=True)
        time.sleep(1)
        self.driver.find_element_by_id("audiorec.android:id/username").send_keys("15530350778")
        time.sleep(1)
        self.driver.find_element_by_id("audiorec.android:id/passward").send_keys("lrs123456")
        time.sleep(1)
        self.driver.find_element_by_xpath("//*[@text='登录']").click()
        print("成功登录!", flush=True)
        #断言是否登录成功,driver.page_source方法获取当前页面所有元素,看“请输入项目号”是否在页面当中
        self.assertIn("请输入项目号",driver.page_source,msg='登录失败,请查看截图'+str(screenshot_path))

这里用到的是
assertNotIn(self, member, container, msg=None)

–判断是字符串是否不包含:member not in container

其他方法:
1.assertEqual(self, first, second, msg=None)

–判断两个参数相等:first == second

2.assertNotEqual(self, first, second, msg=None)

–判断两个参数不相等:first != second

3.assertIn(self, member, container, msg=None)

–判断是字符串是否包含:member in container

4.assertNotIn(self, member, container, msg=None)

–判断是字符串是否不包含:member not in container

5.assertTrue(self, expr, msg=None)

–判断是否为真:expr is True

6.assertFalse(self, expr, msg=None)

–判断是否为假:expr is False

7.assertIsNone(self, obj, msg=None)

–判断是否为None:obj is None

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

你可能感兴趣的:(测试学习)