Appium 学习笔记:Appium+Pytest+Jenkins+Allure 持续集成平台 (上)

大海 · 2020年04月02日 · 最后由 Jerry li 回复于 2020年04月09日 · 2846 次阅读

背景介绍

  • 批量跑指定脚本:我们可以利用 Pytest 批量跑指定目录下的 UI 自动化脚本
  • 生成测试报告:使用 Allure 和 HTML Plugin 插件,完成测试用例的结果输出
  • 脚本定时任务:使用 Jenkins 的 build periodically 完成
  • 邮件通知:使用 Jenkins 的 Extended E-mail Notification 插件

代码结构

测试用例

使用用户登录的例子进行说明
class XXX():
    logging.basicConfig(level=logging.DEBUG, filename="D:/XXX/XXX/Log/LoginLOG.log",
                        format="%(asctime)s%(filename)s [line:%(lineno)d] %(levelname)s %(message)s")

    with open('D:/XXX/XXX/Config/desired_caps.yaml', 'r', encoding='UTF-8') as file:
        data = yaml.load(file, Loader=yaml.FullLoader)

    # 把YAML中的字段值一一存放到desired_caps
    desired_caps = {}
    desired_caps['platformName'] = data['platformName']
    desired_caps['platformVersion'] = data['platformVersion']
    desired_caps['deviceName'] = data['deviceName']

    # base_dir = os.path.dirname(os.path.dirname(__file__))
    # app_path = os.path.join(base_dir, 'app', data['appname'])
    # desired_caps['app'] = app_path

    desired_caps['udid'] = data['udid']
    desired_caps['appPackage'] = data['appPackage']
    desired_caps['appActivity'] = data['appActivity']
    desired_caps['noReset'] = data['noReset']

    # 启动远程端口服务
    driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(data['port']) + '/wd/hub', desired_caps)
    driver.implicitly_wait(5)

    @allure.feature('XXX_00')
    @allure.story('test_story_00')
    @allure.severity('critical')
    def XXX_00(self):
        """
        测试用例1:登录
        :return:
        """
        gp = GuidePage(self.driver)
        gp.click_enter()
        print("点击立即体验,成功进入")
        lgp = LoginPage(self.driver)
        time.sleep(2)

        # 点击同意授权
        lgp.agree()

        # 输入帐号密码,并登录
        f = open("D:/XXX/XXX/Config/account.txt")
        lines = f.readlines()
        for line in lines:
            # 替换掉每多余符号
            line = line.replace("\"", "").replace("\n", "")
            lineList = line.split(",")
            account1 = lineList[0]
            account2 = lineList[1]
        lgp.input(account1, account2)

        lgp.login()
        print("登录成功")

启动 Appium+ 连接模拟器

appium -a 127.0.0.1 -p 4723 -U 127.0.0.1:62001 --session-override

Appium 运行

模拟器运行

补充说明

连接夜神模拟器
  • 打开夜神模拟器,打开设置,调成手机模式,初次进入的话,进入设置,点击版本号 5 次,可以激活使用开发者模式,进入后打开 USB 调试功能。

  • 打开文件资源管理器,进入夜神模拟器的安装位置,在地址栏输入 cmd,回车,会打开 cmd 窗口,进入的路径就是夜神模拟器的安装位置。我的默认安装位置:C:\Program Files (x86)\Nox\bin。

  • 输入 nox_adb.exe connect 127.0.0.1:62001 即可以连接到 adb,或者是 adb connect 127.0.0.1:62001。

  • 切换到 doc 输入 adb devices,可以显示到连接上的设备。

获取当前窗口信息
  • 获得当前活动窗口的信息,包名以及活动窗体
  • 命令:adb shell "dumpsys window windows | grep mCurrent"
可能会遇到的问题
  • 在使用安卓模拟器定位页面元素时,启动 uiautomatorviewer.bat ,但是报错: Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException
  • 解决办法:关闭 appium
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

有可以学习的 demo 吗?能不能脱离开 Jenkins 自己做持续集成呢?

在使用安卓模拟器定位页面元素时,启动 uiautomatorviewer.bat ,但是报错: Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException
解决办法:关闭 appium

建议楼主了解一下 weditor,可以在网页上抓取页面元素

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册