自动化测试常用断言的使用方法(python)

本文介绍了自动化测试中常用的断言方法,包括`assertEqual`、`assertNotEqual`、`assertTrue`、`assertFalse`、`assertIsNone`和`assertIsNotNone`的使用方法。通过实际代码示例展示了如何在测试脚本中实现元素查找、操作及预期结果判断,以提高测试的准确性和效率。

自动化测试中寻找元素并进行操作,如果在元素好找的情况下,相信大家都可以较熟练地编写用例脚本了,但光进行操作可能还不够,有时候也需要对预期结果进行判断。

这里介绍几个常用断言的使用方法,可以一定程度上帮助大家对预期结果进行判断。

这里介绍以下几个断言方法: 
assertEqual 
assertNotEqual 
assertTrue 
assertFalse 
assertIsNone 
assertIsNotNone

(一)assertEqual 和 assertNotEqual 
assertEqual:如两个值相等,则pass 
assertNotEqual:如两个值不相等,则pass 
下面看下具体使用方法

<code class="language-python hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">self.driver.find_element_by_xpath(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"//android.widget.LinearLayout[1]/android.support.v7.app.ActionBar.e[2]"</span>).click()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#切到超模25tab</span>
sleep(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>)
self.assertEqual(self.driver.find_element_by_id(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.boohee.secret:id/tv_title'</span>).text,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">u'超模25'</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'切到超模25tab失败'</span>)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

(1)这边是通过id(com.boohee.secret:id/tv_title)获取它的text值,与预期“超模25”对比,如相等则pass;不相等则fail。 
(2)后面的“切到超模25tab失败”是fail时需要打印的信息,可写可不写。 
断言assertNotEqual反着用就可以了。

(二)assertTrue和assertFalse 
assertTrue:判断bool值为True,则pass 
assertFalse:判断bool值为False,则Pass 
下面看下具体使用方法

<code class="language-python hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">self.driver.find_element_by_xpath(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"//android.widget.LinearLayout[1]/android.widget.TextView[1]"</span>).click()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#点击登录入口</span>
sleep(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)
self.driver.find_element_by_xpath(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"//android.widget.LinearLayout[1]/android.widget.EditText[1]"</span>).send_keys(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"testq1"</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#输入用户名</span>
sleep(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)
self.assertTrue(self.find_element_by_id(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.boohee.secret:id/btn_login'</span>).is_enabled(),<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'未输密码登录按钮为不可点状态,Fail'</span>)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

(1)这边是通过id(com.boohee.secret:id/btn_login)获取它的激活状态,如为True则pass;反之则fail。 
(2)后面的“未输密码登录按钮为不可点状态”是fail时需要打印的信息,可写可不写。 
断言assertFalse反着用就可以了。

(三)assertIsNone和assertIsNotNone 
assertIsNone:不存在,则pass 
assertIsNotNone:存在,则pass 
下面看下具体使用方法

<code class="language-python hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">self.driver.find_element_by_xpath(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"//android.widget.LinearLayout[1]/android.widget.TextView[1]"</span>).click()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#点击登录入口</span>
sleep(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)
self.driver.find_element_by_xpath(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"//android.widget.LinearLayout[1]/android.widget.EditText[1]"</span>).send_keys(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"testq1"</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#输入用户名</span>
sleep(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)
self.driver.find_element_by_xpath(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"//android.widget.LinearLayout[2]/android.widget.EditText[1]"</span>).send_keys(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"boohee"</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#输入密码</span>
sleep(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)
self.driver.find_element_by_xpath(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"//android.widget.LinearLayout[1]/android.widget.Button[1]"</span>).click()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#点击登录按钮</span>
sleep(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>)
self.assertIsNotNone(self.driver.find_element_by_id(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.boohee.secret:id/tv_edit_profile'</span>),<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'无编辑资料按钮,登录失败,Fail'</span>)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>

(1)这边是通过寻找id(com.boohee.secret:id/tv_edit_profile)的元素是否存在,如存在则pass;不存在则fail。 
(2)后面的“无编辑资料按钮,登录失败,Fail”是fail时需要打印的信息,可写可不写。 
断言assertIsNone反着用就可以了。

总结:这边的断言虽然不能像人工判断预期结果那样准确,但合理灵活地运用,对于重要节点加上断言也是具有一定判断预期的效果的。

<think>首先,用户的问题是:“我想了解在自动化测试Python常用方法 请问Python 自动化测试常用方法和最佳实践”。这基于之前的引用,特别是引用[1]、[2]、[3]、[4]、[5],这些是关于Python自动化测试的参考。 系统级指令: 1. 所有行内数学表达式必须使用$...$格式。但用户的问题是关于自动化测试的,没有数学内容,所以可能不需要数学表达式。如果有数学相关,比如在测试中涉及公式,我会使用。 2. 独立公式必须使用$$...$$格式并单独成段。同样,这里可能不适用。 3. LaTeX语法正确:确保任何数学表达都正确。 4. 使用中文回答:整个回答必须用中文。 5. 生成相关问题:在回答末尾,添加相关问题,像示例中那样。 6. 回答中引用的段落末尾自然地添加引用标识,例如[^1]。这意味着在引用内容后添加引用标记。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠,基于提供的引用。 提供的引用: - [^1]: Python自动化测试概述,为什么选择Python。 - [^2]: 使用Python和Selenium进行自动化测试,环境搭建。 - [^3]: 工具使用如unittest和pytest,最佳实践如测试用例独立性、断言等。 - [^4]: 断言方法,如assertEqual。 - [^5]: 断言方法如assertTrue和assertFalse。 用户问题:Python自动化测试常用方法和最佳实践。 结构化回答: 1. **介绍**:简要介绍Python自动化测试中的重要性。 2. **常用方法**: - 单元测试:使用unittest或pytest。 - UI自动化测试使用Selenium。 - API测试:使用requests库。 - 其他工具:如Appium for mobile。 3. **最佳实践**:基于引用[3]、[4]、[5],如测试用例独立性、清晰的断言、测试报告、参数化测试、异常处理。 4. **示例代码**:如果需要,添加简单的代码片段,但要确保相关。 5. **结尾**:总结并生成相关问题。 引用标识:当引用特定内容时,在段落末尾添加[^n]。例如,提到unittest时,引用[^3]。 生成相关问题:像示例那样,添加3个相关问题在最后。 大纲: - 开头:介绍Python自动化测试中的角色。 - 常用方法: - 单元测试框架:unittest, pytest [^3]。 - UI测试:Selenium with Python [^2]。 - API测试:requests库 [^3]。 - 移动测试:Appium等。 - 最佳实践: - 测试用例独立性 [^3]。 - 清晰的断言方法 [^4], [^5]。 - 生成测试报告 [^3]。 - 参数化测试 [^3]。 - 异常处理 [^3]。 - 示例:可能添加一个简单的断言示例。 - 结尾:总结。 - 相关问题。 确保语言中文。</think>### Python自动化测试常用方法和最佳实践 在自动化测试领域,Python凭借其简洁语法、丰富的库生态和强大的社区支持,已成为主流工具之一。它广泛应用于单元测试、UI测试、API测试等场景,能显著提升测试效率和产品质量[^1]。以下我将从常用方法和最佳实践两方面,逐步介绍核心内容,帮助您快速上手。回答基于权威引用和实践经验,确保真实可靠。 #### 一、Python自动化测试常用方法 Python自动化测试方法主要依赖于特定库和框架,以下是几种最常用方法: 1. **单元测试(Unit Testing)** 单元测试用于验证函数、方法或类的功能是否符合预期。Python内置的`unittest`框架和第三方库`pytest`是最常用工具。 - **示例代码(使用unittest)**: ```python import unittest def add(a, b): return a + b class TestAddFunction(unittest.TestCase): def test_add_positive(self): self.assertEqual(add(2, 3), 5) # 验证加法结果 if __name__ == '__main__': unittest.main() ``` - `unittest`提供丰富的断言方法,如`assertEqual`、`assertTrue`等,用于检查预期行为[^4]。 - `pytest`的优势在于更简洁的语法和参数化测试支持,例如使用`@pytest.mark.parametrize`减少重复代码[^3]。 2. **UI自动化测试(Web/Mobile)** 用于模拟用户界面交互,确保Web或移动应用的UI功能正常。Selenium是核心工具,结合Python库如`selenium-webdriver`。 - **示例场景**:自动化登录测试。 ```python from selenium import webdriver from selenium.webdriver.common.by import By import time driver = webdriver.Chrome() driver.get("https://example.com/login") driver.find_element(By.ID, "username").send_keys("test_user") driver.find_element(By.ID, "password").send_keys("password123") driver.find_element(By.ID, "login-btn").click() time.sleep(2) assert "Welcome" in driver.title # 断言登录成功 driver.quit() ``` - Selenium支持跨浏览器测试,并可与Appium集成用于移动端UI测试[^2]。 3. **API测试(RESTful Services)** 验证API接口的功能和性能,常用`requests`库发送HTTP请求并解析响应。 - **示例代码**: ```python import requests import pytest def test_api_get(): response = requests.get("https://api.example.com/data") assert response.status_code == 200 # 验证状态码 assert "data" in response.json() # 验证响应内容 ``` - 结合`pytest`可生成测试报告,便于集成到CI/CD流程中[^3]。 4. **性能与负载测试** 使用`locust`或`pytest`插件模拟高并发场景,确保系统稳定性。 #### 二、Python自动化测试最佳实践 遵循最佳实践能避免常见陷阱,提高测试可靠性和维护性。以下是关键点: 1. **测试用例独立性** 每个测试用例应独立运行,不依赖其他用例的状态或数据。这确保失败时能快速定位问题,避免连锁错误[^3]。 - **实现方式**:在`unittest`中使用`setUp()`和`tearDown()`方法初始化/清理环境;在`pytest`中使用fixture机制。 2. **清晰的断言方法** 断言是测试的核心,Python提供多样化方法: - `assertEqual(a, b)`:验证相等性,适用于数值或字符串比较[^4]。 - `assertTrue(condition)` 和 `assertFalse(condition)`:验证布尔条件,例如检查按钮是否可点击[^5]。 - **最佳实践**:断言应具体且易读,避免模糊检查。例如,优先使用`assertIn()`验证元素存在性,而非简单布尔判断。 3. **生成测试报告** 报告能直观展示测试结果,便于团队协作。推荐使用: - `pytest-html`插件生成HTML报告。 - 集成到CI/CD工具(如Jenkins或GitHub Actions),实现自动化运行和报告推送[^3]。 4. **参数化测试** 对重复测试场景使用参数化,减少代码冗余。例如,测试多组登录凭据: ```python import pytest @pytest.mark.parametrize("username, password", [("user1", "pass1"), ("user2", "pass2")]) def test_login(username, password): # 模拟登录逻辑 assert login_success(username, password) is True ``` - 这提高了测试覆盖率和效率[^3]。 5. **异常处理与错误捕获** 预期异常应被显式捕获,确保测试在错误时优雅处理。例如: ```python def test_divide_by_zero(): with pytest.raises(ZeroDivisionError): # 捕获预期异常 result = 1 / 0 ``` - 避免使用全局异常捕获,以保持测试精准性[^3]。 6. **环境隔离与依赖管理** 使用虚拟环境(如`venv`)隔离项目依赖,并通过`requirements.txt`管理库版本,确保测试一致性[^2]。 #### 总结 Python自动化测试的核心方法包括单元测试(unittest/pytest)、UI测试(Selenium)和API测试(requests),结合最佳实践如测试独立性、清晰断言和报告生成,能构建高效可靠的测试体系。选择Python的主要优势在于其库丰富性和易集成性,特别适合敏捷开发环境[^1]。实际应用中,建议从简单单元测试入手,逐步扩展到端到端场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值