Appium自动化测试完全指南

背景

在当今快速发展的互联网时代,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。

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

运行得到响应和断言结果

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

知识扩展

  • UI自动化测试框架比较
  • 有什么方法可以自动生成自动化测试报告?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/159711.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十二.Jenkins持续集成

十二.Jenkins持续集成 一.安装jenkins 1.下载 Jenkins下载地址:http://jenkins-ci.org/ 或 https://mirrors.jenkins-ci.org/redhat/2.安装 可以通过官网的安装方式来安装 安装完后,需要修改以下的配置 vim /usr/lib/systemd/system/jenkins.servic…

揭示高防CDN的局限性与探讨其小众化原因

在网络安全领域,高防CDN(高防御内容分发网络)被认为是保护网站免受恶意攻击的强大工具,然而,尽管其在防护方面表现卓越,高防CDN在广泛应用中仍然相对小众。本文将从高防CDN的局限性出发,深入探讨…

nodejs微信小程序-客户管理管理系统的设计与实现-安卓-python-PHP-计算机毕业设计推荐

然而客户管理系统是一项较为复杂的工作,涉及多个组织、多个层次的协调和共同管理,整个过程需要将管理系统和人员进行全面整合。文章在具体研究过程中从多方面入手,针对当前企业管理中客户管理系统应用存在的问题进行了分析,阐述了…

酷柚易汛ERP - 通用设置操作指南

1、系统设置 对系统进行初步设置,如系统LOGO、站点名称、备案号、版权信息、尾部信息及系统相关的一些基础设置 2、应用/小程序配置 对系统移动端进行相关配置 3、短信配置 对系统短信进行配置,此配置用于移动端一些通知类信息发送【目前仅支持阿里云…

Pandas get_dummies用法

get_dummies 是 pandas 实现one hot encode的方式 ​  one-hot的基本思想:将离散型特征的每一种特征取值都看成一种状态,若指定离散特征中有N个 不相同的取值,那么我们就可以将该特征抽象成N种不同的状态,one-hot编码保证了每一…

vue项目中设置background: url() 是行内样式不生效,样式表是可以的

[TOC](vue项目中设置background: url() 是行内样式不生效,样式表是可以的) 首先:如果不是项目中普通的一个index.html中是可以的 一、原因 在Vue项目中,行内样式和样式表的编译规则是有所不同的。当你在Vue组件的行内样式中使用相对路径引用图…

机器学习:十大算法快速回顾

一、说明 对于机器学习的是个经典算法,本篇将展示一个回顾,注意,本篇不是具体原理信息介绍,没有代码,但是对于初学者是一个有益的导读。 二. 线性回归 2.1 算法描述 有没有想过数据奇才如何预测未来?输入线…

Gdevops北京站 2023年全球敏捷运维峰会-核心PPT资料下载

一、峰会简介 2023 Gdevops全球敏捷运维峰会-北京站成功举办,一众产学研界技术大佬与新锐专家,以智能为主线,就数据库、运维、架构、金融科技等领域进行了前沿技术与实践经验交流,一同畅聊AIGC、云原生、数智化转型下的新机遇。 …

uniapp 手动调用form表单submit事件

背景&#xff1a; UI把提交的按钮弄成了图片&#xff0c;之前的button不能用了。 <button form-type"submit">搜索</button> 实现&#xff1a; html&#xff1a; 通过 this.$refs.fd 获取到form的vue对象。手动调用里面的_onSubmit()方法。 methods:…

mac苹果电脑需要安装杀毒软件吗?

随着数字时代的发展&#xff0c;计算机安全问题变得越来越重要。而在计算机安全领域中&#xff0c;杀毒软件是一个被广泛讨论的话题。苹果电脑需要安装杀毒软件吗&#xff1f;对于苹果电脑用户来说&#xff0c;他们常常会疑惑自己是否需要安装杀毒软件来保护自己的电脑。本文将…

Notepad++ 通过HexEditor插件查看.hprof文件、heap dump文件的堆转储数据

文章目录 需求场景插件安装查看notepad的版本&#xff0c;看看是32位的还是64位的下载对应的版本解压导入插件打开notepad插件文件夹&#xff1a;Notepad安装目录新建一个HexEditor文件夹选中插件文件导入 重启notepad使用 需求场景 想要查看app内存的某个域的数据。 利用Andr…

idea显示pom.xml文件漂黄警告 Dependency maven:xxx:xxx is vulnerable

场景&#xff1a; idea警告某些maven依赖包有漏洞或者依赖传递有易受攻击包&#xff0c;如下&#xff1a; 解决&#xff1a; 1、打开idea设置&#xff0c;找到 File | Settings | Editor | Inspections 2、取消上述两项勾选即可

目标检测标注工具AutoDistill

引言 在快速发展的机器学习领域&#xff0c;有一个方面一直保持不变&#xff1a;繁琐和耗时的数据标注任务。无论是用于图像分类、目标检测还是语义分割&#xff0c;长期以来人工标记的数据集一直是监督学习的基础。 然而&#xff0c;由于一个创新性的工具 AutoDistill&#x…

02-1解析xpath

我是在edge浏览器中安装的xpath&#xff0c;需要安装的朋友可以参考下面这篇博客最新版edge浏览器中安装xpath插件 一、xpathd的使用 安装lxml pip install lxml ‐i https://pypi.douban.com/simple导入lxml.etree from lxml import etreeetree.parse() 解析本地文件 htm…

计算机中msvcp140.dll丢失的解决方法,总结5个有效的方法

msvcp140丢失错误指的是在系统中缺少了"msvcp140.dll"动态链接库文件&#xff0c;该文件是Microsoft Visual C 2015 Redistributable的一个重要组成部分。这个错误通常会导致一些软件无法正常运行&#xff0c;出现错误提示。msvcp140是一个C运行时库&#xff0c;它包…

Python3语法总结-基本数据类型①

Python3语法总结-基本数据类型① Python3语法总结一.注释和基本数据类型标识符与关键字注释变量标准数据类型数字(Number)布尔类型(bool) 未完待续... Python3语法总结 一.注释和基本数据类型 标识符与关键字 标识符是指程序中定义的一个名字&#xff0c;如变量名&#xff0…

【AI视野·今日CV 计算机视觉论文速览 第279期】Tue, 31 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Tue, 31 Oct 2023 Totally 165 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers SimMMDG: A Simple and Effective Framework for Multi-modal Domain Generalization Authors Hao Dong, Ismail Nejjar, …

springMVC学习笔记-请求映射,参数绑定,响应,restful,响应状态码,springMVC拦截器

目录 概述 springMVC做了什么 springMVC与struts2区别 springMVC整个流程是一个单向闭环 springMVC具体的处理流程 springMVC的组成部分 请求映射 RequestMapping 用法 属性 1.value 2.method GET方式和POST方式 概述 HTTP给GET和POST做了哪些规定 GET方式&…

隐私合规检测工具_camille使用

前期准备 电脑端安装python3、frida&#xff0c;准备一台root过的安卓机 电脑安装frida和camille pip install frida pip install frida-tools #安装frida git clone https://github.com/zhengjim/camille.git #下载camille cd camille pip install -r requirements.txt手机…

(论文阅读)TiDB:一款基于Raft的HTAP数据库

引言 混合事务分析处理&#xff08;HTAP&#xff09;数据库要求隔离处理事务查询和分析查询&#xff0c;以消除它们之间的干扰。要实现这一点&#xff0c;有必要维护为这两种查询类型指定的数据的不同副本。然而&#xff0c;为存储系统中的分布式副本提供一致的视图是一项挑战…