【技术分享】app自动化测试(Android)-- 属性获取与断言

1241 篇文章 6 订阅
1146 篇文章 2 订阅

断言是 UI 自动化测试的三要素之一,是 UI 自动化不可或缺的部分。在使用定位器定位到元素后,通过脚本进行业务操作的交互,想要验证交互过程中的正确性就需要用到断言。

常规的UI自动化断言

分析正确的输出结果,常规的断言一般包含以下的几个情形:

  • 比较大小

  • 包含或者不包含

  • 验证布尔值

Python 示例代码
# 第一种 :比较大小price = driver.find_element(    By.XPATH,'//*[contains(@resource-id="current_price")]').textassert float(price) >=170
# 第二种 :包含验证name = driver.find_element(    By.XPATH,'//*[contains(@resource-id="stockName")]').textassert "BABA" in name
# 第三种 :布尔值验证def check():    name = driver.find_elements(By.XPATH,'//*[contains(@resource-id="stockName")]')    return True if len(name)!=0 else Falseassert check()

上面的示例可以看出,Python 的 assert 是用来判断一个条件是否为真,如果它为真,就继续执行,如果为假,则抛出 AssertError 并且包含错误信息。断言可以在条件不满足程序运行的情况下直接返回错误。

Java 示例代码
// 第一种 :比较大小String price = driver.findElement(By.xpath("//*[contains(@resource-id=\"current_price\")]")).getText();float currentprice = Float.parseFloat(price);float expectprice = 170;assert currentprice >= expectprice;
// 第二种 :包含验证String name = driver.findElement(By.xpath("//*[contains(@resource-id=\"stockName\")]")).getText();
assert name.contains("BABA");
// 第三种 :布尔值验证@Testpublic boolean check(){    List<WebElement> names = driver.findElements(By.xpath("//*[contains(@resource-id=\"stockName\")]"));    return names.size() > 0 ? true : false;}
@Testpublic void checkTest(){    assert check();}

上面的示例可以看出,测试中经常会需要使用断言来判断一个条件是否为真,Java 语法中也可以通过 assert 关键字进行断言。另外如果需要更复杂的断言处理,可以使用 Hamcrest 提供的方法,Hamcrest 提供了大量被称为“匹配器”的方法。

Hamcrest断言

Hamcrest 是一个以测试为目的,能组合成灵活表达式的匹配器类库,用于编写断言的框架,使用这个框架编写断言,可以提高可读性以及开发测试的效率。Hamcrest 提供了大量被称为“匹配器”的方法。每个匹配器都设计用于执行特定的比较操作。Hamcrest 的可扩展性强,允许创建自定义的匹配器,并支持多种语言。

Hamcrest 安装
  • Python 版本

pip install pyhamcrest
  • Java 版本

<dependency>    <groupId>org.hamcrest</groupId>    <artifactId>hamcrest</artifactId>    <version>2.2</version>    <scope>test</scope></dependency>
Hamcrest 导包
  • Python 版本

from hamcrest import *
  • Java 版

import static org.hamcrest.MatcherAssert.assertThat;import static org.hamcrest.Matchers.*;

Hamcrest 提供了一个全新的断言语法(assert_that),可以只使用 assert_that 一个断言语句,结合 Hamcrest 提供的匹配符,就可以完成各种断言场景。

常用方法 API

1.比较两个字符串相等,示例代码如下:

  • Python 版本

assert_that("this is a string",equal_to("this is a string"))
  • Java 版本

assertThat("this is a string",equalTo("this is a string"));

2.数值匹配,比较两个值是否接近,示例代码如下:

  • Python 版本

assert_that(8,close_to(10,2))
  • Java 版本

assertThat(8.0,closeTo(10,2));

解释:断言 8 接近于 (8 ~ 12)这个范围。

3.包含某个字符,示例代码如下:

  • Python 版本

assert_that('abc',contains_string('d'))
  • Java 版本

assertThat("abc",containsString("d"));
案例

使用“雪球”应用,打开雪球 APP,点击页面上的搜索输入框输入“alibaba”,然后在搜索联想出来的列表里面点击“阿里巴巴”,选择股票分类,获取股票类型为“09988”的股票价格,最后验证价格在预期价格的 10% 范围浮动。核心代码如下:

PYTHON 版本
from hamcrest import assert_that, close_to...def test_wait(self):    # 点击搜索输入框    self.driver.find_element_by_id(        "com.xueqiu.android:id/tv_search").click()    # 输入 “alibaba”    self.driver.find_element_by_id(        "com.xueqiu.android:id/search_input_text"        ).send_keys("alibaba")    # 点击“阿里巴巴”    self.driver.find_element_by_xpath("//*[@text='阿里巴巴']").click()    # 点击“股票”    self.driver.find_element_by_xpath(        "//*[contains(@resource-id,'title_container')]//*[@text='股票']"        ).click()    # 获取股票价格    locator = (MobileBy.XPATH,    "//*[@text='09988']/../../..\    //*[@resource-id='com.xueqiu.android:id/current_price'")
    ele = WebDriverWait(self.driver,10)\    .until(expected_conditions.element_to_be_clickable(locator))
    print(ele.text)    current_price = float(ele.text)    expect_price = 170
    # 使用 hamcrest 断言来判断股票价格浮动在 10% 范围内    assert_that(current_price,    close_to(expect_price, expect_price*0.1))...
JAVA 版本​​​​​​
import static org.hamcrest.MatcherAssert.assertThat;import static org.hamcrest.Matchers.*;...@Testpublic void wait1Test(){    // 点击搜索输入框    driver.findElementById("com.xueqiu.android:id/tv_search").click();    // 输入 “alibaba”    driver.findElementById("com.xueqiu.android:id/search_input_text").sendKeys("alibaba");
    // 点击“阿里巴巴”    driver.findElementByXPath("//*[@text=\"阿里巴巴\"]").click();
    // 点击“股票”    driver.findElementByXPath("//*[contains(@resource-id,\"title_container\")]//*[@text=\"股票\"]").click();
    // 获取股票价格    By price_locator = By.xpath("//*[@text='09988']/../../..//*[@resource-id=\"com.xueqiu.android:id/current_price\"]");    WebDriverWait wait = new WebDriverWait(driver, 10);    WebElement ele = wait.until(ExpectedConditions.elementToBeClickable(price_locator));
    System.out.println(ele.getText());    double currentPrice = Double.parseDouble(ele.getText());    double expectPrice = 170;    // 使用 hamcrest 断言来判断股票价格浮动在 10% 范围内    assertThat(currentPrice, closeTo(expectPrice,expectPrice*0.1));
}...

上面的示例中,通过assert_that/assertThat 是用于生成测试断言的样式化语句,比较两个值(current_price 与 expect_price)是否接近,断定实际值 current_price 在expect_price-expect_price*0.1 与 expect_price+expect_price*0.1 范围区间浮动。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

资料获取方式 :

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值