软件测试 |属性获取与断言

1.断言简介

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

2.常规的UI自动化测试中使用的断言

在UI自动化测试中,我们通过使用断言来分析测试结果的正确性。

常用的断言一般包含以下几种。

  • 比较大小:比较数字的大小( 如2>1 )。
  • 内容包含:某个字符串包含另一个字符串(“abcd”包含“ab”)。
  • 内容不包含:某个字符串不包含另一个字符串(如“abc”不包含"de")。
  • 验证布尔值:验证一个表达式是否为真(如2>=1)。

演示代码如下(Python版本和Java版本):

Python版本


# 第一种:比较大小

price = driver.find_element(

By.XPATH,'//*[contains(@resource-id="current_price")]').text

assert float(price) >=170


#第二种:包含验证

name = driver.find_element(

By.XPATH,'//*[contains(@resourse-id="stockName")]').text

assert"BABA" in name


#第三种:布尔值验证

def check():

name = driver.find_elements(By.XPATH,'//*[contains(@resource-

id="stockName")]')

return True if len(name)!=0 else False

assert 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;


//第二种:包含验证

Srting name = driver.findElement(By.xpath("//*[contains(@resource-

id=\"stockNme")]")).getText();


assert name.contains("BABA");


//第三种:布尔值验证

@Test

public boolean check(){

List<WebElement> name = driver.findElements(By.xpath("//

*[contains(@resource-id=\"stockName\")]"));

return name.size() > 0 ? turn : false;

}


@Test

public void checkTest(){

assert check();

}

从上面的示例可以看出,Java用assert关键字进行断言。另外,如果需要处理更复杂的断言,可以使用Hamcrest提供的方法。Hamcrest提供了大量被称为 “匹配器”的方法。

3.Hamcrest断言

(1)Hamcrest简介

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

(2)安装Hamcrest

在Python和Java环境下安装Hamcrest演示如下。

Python版本

pip install pyhamcrest

Java版本


<dependency>

<groupId>org.hamcrest</groupId>

<artifactId>hamcrest</artifactId>

<version>2.2</version>

<scope>test</scope>

</dependency>

(3)导入Hamcrest包

代码中使用Hamcrest时,需要先在代码中导入Hamcrest包。Hamcrest的Python和Java环境下的包导入如下。

Python版本

from hamcrest import * 

Java版本

  1. import static org.hamcrest.MatcherAssert.assertThat;

  2. import static org.hamcrest.Matchers.*;

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

(4)assert-that提供的API(方法)

1)比较两个字符串相等的API实例代码如下(Python版和Java版)。

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)数值匹配,比较两个值是否接近的API示例代码如下(Python版和Java版)。

Python版

assert_that(8,close_to(10,2))

Java版本

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

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

3)判断包含某个字符的API实例代码如下(Python版和Java版)。

Python版本

assert_that('abc',contains_string('d'))

Java版本

assertThat("abc",conrainsString("d"));

(5)案例

测试案例使用的是“雪球”应用,打开雪球App,先点击App页面上的“搜索输入框”,并在 “搜索输入框”中输入“alibaba”,然后再搜索关键字联想出来的词组列表里面点击“阿里巴巴”,选择股票分类,获取股票类型为“09988”的股票价格,最后验证价格在预期价格的10%上下浮动。核心演代码如下(Python版和Java版)。

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(@resourse-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.*;

...

@Test

public void waitlTest(){

//点击"搜索输入框"

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区间浮动。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值