百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Appium自动化测试工具入门与进阶学习

ccwgpt 2024-10-14 08:45 21 浏览 0 评论

背景

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

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

自动化测试

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

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

Appium 自动化测试

Appium 是什么

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

用例规则

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

Excel 编写测试用例

自动化测试用例如何编写

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

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)

获取元素定位

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

获取到了元素的位置。

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

  • 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 请求,填入路径、名称、请求方法。

编写断言脚本

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

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

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

运行得到响应和断言结果

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

知识扩展

相关推荐

RACI矩阵:项目管理中的角色与责任分配利器

作者:赵小燕RACI矩阵RACI矩阵是项目管理中的一种重要工具,旨在明确团队在各个任务中的角色和职责。通过将每个角色划分为负责人、最终责任人、咨询人和知情人四种类型,RACI矩阵确保每个人都清楚自己...

在弱矩阵组织中,如何做好项目管理工作?「慕哲制图」

慕哲出品必属精品系列在弱矩阵组织中,如何做好项目管理工作?【慕哲制图】-------------------------------慕哲制图系列0:一图掌握项目、项目集、项目组合、P2、商业分析和NP...

Scrum模式:每日站会(Daily Scrum)

定义每日站会(DailyScrum)是一个Scrum团队在进行Sprint期间的日常会议。这个会议的主要目的是为了应对Sprint计划中的不断变化,确保团队能够有效应对挑战并达成Sprint目标。为...

大家都在谈论的敏捷开发&Scrum,到底是什么?

敏捷开发作为一种开发模式,近年来深受研发团队欢迎,与瀑布式开发相比,敏捷开发更轻量,灵活性更高,在当下多变环境下,越来越多团队选择敏捷开发。什么是敏捷?敏捷是一种在不确定和变化的环境中,通过创造和响应...

敏捷与Scrum是什么?(scrum敏捷开发是什么)

敏捷是一种思维模式和哲学,它描述了敏捷宣言中的一系列原则。另一方面,Scrum是一个框架,规定了实现这种思维方式的角色,事件,工件和规则/指南。换句话说,敏捷是思维方式,Scrum是规定实施敏捷哲学的...

敏捷项目管理与敏捷:Scrum流程图一览

敏捷开发中的Scrum流程通常可以用一个简单的流程图来表示,以便更清晰地展示Scrum框架的各个阶段和活动。以下是一个常见的Scrum流程图示例:这个流程图涵盖了Scrum框架的主要阶段和活动,其中包...

一张图掌握项目生命周期模型及Scrum框架

Mockito 的最佳实践(mock方法)

记得以前面试的时候,面试官问我,平常开发过程中自己会不会测试?我回答当然会呀,自己写的代码怎么不测呢。现在想想我好像误会他的意思了,他应该是想问我关于单元测试,集成测试以及背后相关的知识,然而当时说到...

EffectiveJava-5-枚举和注解(java枚举的作用与好处)

用enum代替int常量1.int枚举:引入枚举前,一般是声明一组具名的int常量,每个常量代表一个类型成员,这种方法叫做int枚举模式。int枚举模式是类型不安全的,例如下面两组常量:性别和动物种...

Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!

Maven简介Maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”。Maven是一个跨平台的项目管理工具。主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。仔...

Java单元测试框架PowerMock学习(java单元测试是什么意思)

前言高德的技术大佬在谈论方法论时说到:“复杂的问题要简单化,简单的问题要深入化。”这句话让我感触颇深,这何尝不是一套编写代码的方法——把一个复杂逻辑拆分为许多简单逻辑,然后把每一个简单逻辑进行深入实现...

Spring框架基础知识-第六节内容(Spring高级话题)

Spring高级话题SpringAware基本概念Spring的依赖注入的最大亮点是你所有的Bean对Spring容器的存在是没有意识的。但是在实际的项目中,你的Bean必须要意识到Spring容器...

Java单元测试浅析(JUnit+Mockito)

作者:京东物流秦彪1.什么是单元测试(1)单元测试环节:测试过程按照阶段划分分为:单元测试、集成测试、系统测试、验收测试等。相关含义如下:1)单元测试:针对计算机程序模块进行输出正确性检验工作...

揭秘Java代码背后的质检双侠:JUnit与Mockito!

你有没有发现,现在我们用的手机App、逛的网站,甚至各种智能设备,功能越来越复杂,但用起来却越来越顺畅,很少遇到那种崩溃、卡顿的闹心事儿?这背后可不是程序员一拍脑袋写完代码就完事儿了!他们需要一套严谨...

单元测试框架哪家强?Junit来帮忙!

大家好,在前面的文章中,给大家介绍了以注解和XML的方式分别实现IOC和依赖注入。并且我们定义了一个测试类,通过测试类来获取到了容器中的Bean,具体的测试类定义如下:@Testpublicvoid...

取消回复欢迎 发表评论: