Appium自动化测试最佳实践
  Wn0Qd22d3WN0 2023年11月19日 18 0

背景

在当今快速发展的互联网时代,UI 需求越来越大、越来越高大上、越来越复杂,相对应的 App 作为最重要的大前端的一部分,也不可避免。

App 迭代的不断加速,需求的不断复杂化,给测试人员增加了非常大的工作量,但是没办法,测试是保证产品质量的一道非常重要的关卡,只有通过这道关卡,产品的质量才能得到真正的提高。

自动化测试

但是随着 App 的需求复杂化,测试人员似乎已经没有很多精力去应对这一场景,所以自动化测试就出世了,让机器来帮我们做大量的、复杂的、重复的测试工作,是现在测试的趋势。

Appium自动化测试最佳实践_API

选择正确的**自动化测试工具**,也是一件非常重要的事情。

Appium 自动化测试

Appium 是什么

Appium 是一个开源测试自动化框架,可用于本地、混合和移动 web 应用程序。 它使用 WebDriver 协议驱动 iOS、Android 和 Windows 应用程序。可以用于做自动化测试。

Appium自动化测试最佳实践_程序员_02

用例规则

  • 一个脚本对应一个测试的场景
  • 只做功能正向逻辑的验证,尽量不做逆向逻辑的验证
  • 脚本和脚本直接不要互相依赖

Excel 编写测试用例

  • id:测试用例的 id
  • title:测试用例的标题
  • data:测试用例用到的数据
  • result:测试用例测试的结果
  • actual:测试用例运行结果,成功或者失败

Appium自动化测试最佳实践_API_03

OpenPyXI 读取数据

编写完 Excel 表格,我们需要使用 Python 的 OpenPyXI 对 Excel 表格进行读取解析:

def get_cases(self, sheet_name):
  sheet_name=sheet_name
  sheet=self.workbook[sheet_name]
  max_row=sheet.max_row
  cases=[]
  for r in range(2, max_row + 1):
    case=Case()
    case.id=sheet.cell(row=r,column=1).value
    case.title=sheet.cell(row=r,column=2).value
    case.data=sheet.cell(row=r,column=3).value
    case.expacted=sheet.cell(row=r,column=4).value
    cases.expacted=sheet.cell(row=r,column=4).value
    cases.append(case)
    if type(case.data) == str
      case.data = json.loads(case.data)
return cases

测试结果写入 Excel

当测试完成之后,需要把测试的结果写入到 Excel:

def write_result(self,sheet_name,row,result,actual=None):
  sheet=self.workbook[sheet_name]
  sheet.cell(row,5).value=result
  sheet.cell(row,6).value=actual
  self.workbook.save(filename=self.file_name)

获取元素定位

测试用例设计完,我们需要执行,我们需要自动化测试操作页面上的元素,所以我们得获取元素。

Appium自动化测试最佳实践_测试用例_04

获取到了元素的位置。

Appium自动化测试最佳实践_程序员_05

获取元素定位的一些参数,有:

  • ID 定位:find_element_by_id()
  • class 定位:find_element_by_class_name()
  • 文本定位:find_element_by_android_uiautomator()
  • xpath 定位:find_element_by_xpath()

使用 unittest 进行断言

unittest 的主要语法包括:

  • TestCase
  • TestSuite
  • TestRunner
  • TestLoader
  • Fixture

来个小案例:实现一个测试用例,测试一个加法函数

TestCase

TestCase 就是测试用例的意思。

import unittest

def add(x, y):
    return x + y

class Test01(unittest.TestCase):
    def testadd01(self):
        add(2, 3)

    def testadd02(self):
        add(10, 10)

# testing.....
unittest.main("test01_testcase")

TestSuite & TextTestRunner

  • TestSuite 是测试套件,可以批量执行测试用例
  • TextTestRunner 是用来执行 测试套件 的
import unittest
from Unittest import Test01

suite = unittest.TestSuite()

suite.addTest(Test01("testadd01"))

# testing......
runner = unittest.TextTestRunner()
runner.run(suite)

TestLoader

TestLoader 可以执行多个测试文件(查找 test 开头的 .py 测试文件)。

现在有个小案例:

运行 tests 目录下 test1.py~test5.py 文件。

import unittest

suite = unittest.defaultTestLoader.discover("../tests")

unittest.TextTestRunner().run(suite)

使用 Apifox 进行 API 自动化测试

那么测试完 UI 界面之后,我们如何更好地去单独测试 API 层面呢?我们需要借助一些比较出色的 API 工具去进行测试,比如 Apifox

创建 API 请求

我们需要先创建一个 API 请求,填入路径、名称、请求方法。

Appium自动化测试最佳实践_测试用例_06

编写断言脚本

接着我们到 后置脚本 中,选择自定义脚本。

Appium自动化测试最佳实践_API_07

Apifox 已经为我们提供了现成的脚本语句,我这里想要判断返回的 status code 是否为 200。

Appium自动化测试最佳实践_程序员_08

然后点击保存按钮,即可成功创建请求。

运行得到响应和断言结果

到运行页,点击发送按钮,则可得到响应,以及断言结果。

Appium自动化测试最佳实践_测试用例_09

知识扩展

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
Wn0Qd22d3WN0
最新推荐 更多