写点什么

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

  • 2022-10-12
    北京
  • 本文字数:2768 字

    阅读完需:约 9 分钟

本文节选自霍格沃兹测试开发学社内部教材


断言是 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 提供的匹配符,就可以完成各种断言场景。


常用方法 API1.比较两个字符串相等,示例代码如下:


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_price0.1 与 expect_price+expect_price0.1 范围区间浮动。


点击下方链接免费领取:性能测试+接口测试+自动化测试+测试开发+测试用例+简历模板+测试文档

http://qrcode.testing-studio.com/f?from=infoQ&url=https://ceshiren.com/t/topic/22265

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
技术分享 | app自动化测试(Android)-- 属性获取与断言_霍格沃兹测试开发学社_InfoQ写作社区