airtest结合unittest

airtest提供了控制手机的方法,unittest善于组织测试代码。

通过unittest可以将测试的功能点分成一个个的测试函数。

unittest有两个函数setUp, tearDown. 分别在每个测试函数的开始和结束时调用。分别写开始程序和结束程序。

先看样例代码,这是一个简单的登陆测试(代码可以在http://git.mt.nie.netease.com/hzsunshx/h15-example下载到)。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import unittest
import airtest

# adb devices可以查到
devno = os.getenv('AIRTEST_DEVNO') or 'af89123lkjv'
appname = os.getenv('AIRTEST_APPNAME') or 'com.netease.h15'
device = os.getenv('AIRTEST_DEVICE') or airtest.ANDROID

app = airtest.connect(devno, appname=appname, device=device, monitor=False)
app.globalSet(image_match_method='template', threshold=0.7)

class TestFunctions(unittest.TestCase):
    def setUp(self):
        activity = '.Main' # 不用的应用activity不一样,用air.test inspect <apkfile> 可以查看activity
        os.system('adb shell am start -s -N ' + appname + '/'+activity)

    def tearDown(self):
        os.system('adb shell am force-stop ' + appname)

    def _randname(self, length=6):
        import random, string
        s = ''
        for i in range(length):
            s += random.choice(string.letters)
        return s
        
    def _register(self):
        user, passwd = self._randname(), self._randname()
        app.click('login_account.png')
        app.type(user+'\n')
        app.click('login_password.png')
        app.type(passwd+'\n')
        app.click('register.png')
        app.sleep(1)
        app.click('login.png')
        app.sleep(2)
        app.wait('zhengqi.png')
        
    def test_login(self):
        self._register()
        app.takeSnapshot('final-snapshot.png')

if __name__ == '__main__':
    unittest.main()