0


python+selenium 自动化测试--完成的第一个查询功能测试用例

一、UnitTest框架

1、概念:UnitTest框架是专门用来进行执行代码测试的框架

2、作用:1)能够阻止多个用例去执行

            2)提供丰富的断言方法

            3)提供丰富的日志和测试结果

3、核心要素

1)TestCase:测试用例,一个testcase就是一条测试用例。

2)TestSuite:测试套件,多条测试用例集合在一起

3)TextTestRunner:测试执行,用来执行测试用例套件

4)FixTure:是一个概述,对一个测试用例环境的搭建和销毁就是一个Fixture

具体分析:

1)TestCase:测试用例必须以test开头。(原因:unittest.TestCase类批量运行的方法是搜索执行test开头的方法)

使用方法:

导包:import unittest --> 导入unitest框架

继承:unittest.TestCase --> 新建测试类继承unittest.TestCase

2)TestSuite:

一条测试用例(.py)内,多个方法也可以使用测试套件

TestSuite需要配合TextTestRunner才能被执行

使用:

实例化: suite=unittest.TestSuite() (suite:为TestSuite实例化的名称)

添加用例:suite.addTest("ClassName(MethodName)") (ClassName:为类名;MethodName:为方法名)

添加扩展:suite.addTest(unittest.makeSuite(ClassName)) (搜索指定ClassName内test开头的方法并添加到测试套件中)

3)TextTestRunner:

使用:

实例化: runner=unittest.TextTestRunner() (runner:TextTestRunner实例化名称)

执行: runner.run(suite) (suite:为测试套件名称)

  1. FixTure

注意点:

必须继承unittest.TestCase类,setUp、tearDown才是一个Fixture;

setUp:一般做初始化工作,比如:实例化浏览器、浏览器最大化、隐式等待设置

tearDown:一般做结束工作,比如:退出登录、关闭浏览器

如果一个测试类有多个test开头方法,则每个方法执行之前都会运行setUp、结束时运行tearDown

以系统网页上查询功能为例

步骤如下:

  1. 导包 import unittest

  2. 新建测试类并继承unittest.TestCast

  3. 新建一个Fixture(setUp、tearDown)

  4. 新建登录方法

  5. if name == 'main':

  6. unittest.main()执行

具体脚本如下:

1)先登录系统

登录系统写在初始化函数中

import unittest
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
class TestZhiku(unittest.TestCase):
    def setUp(self) -> None:
        self.driver = webdriver.Chrome()
        # 隐式等待15s
        self.driver.implicitly_wait(15)
        # 浏览器窗口最大化
        self.driver.maximize_window()
        url = "**地址自己输入**"
        # 打开浏览器地址,输入用户名和密码进行登录
        self.driver.get(url)
        self.driver.find_element(By.XPATH, "//*[@id='app']/div/div/div[2]/div[2]/img").click()
        self.driver.find_element(By.CSS_SELECTOR, "input[placeholder = '请输入用户名']").send_keys("**用户名自己输入**")
        self.driver.find_element(By.CSS_SELECTOR, "input[placeholder = '请输入密码']").send_keys("**密码自己输入**")
        self.driver.find_element(By.XPATH, "//span[text() = '登录']").click()

2)进入查询页面,定位到关键字查询输入框输入关键字:测试

text01 = self.driver.find_element(By.XPATH, "//*[@id='app']/div/div[1]/div[3]/div[6]/span").text
self.driver.find_element(By.XPATH, "//*[text() = '项目工作台']").click()
self.driver.switch_to.frame("mainIframe") # 若有iframe内嵌,先切换进入到该iframe
self.driver.find_element(By.CSS_SELECTOR, "input[placeholder = '请输入关键字搜索']").send_keys("测试")
self.driver.find_element(By.XPATH, "//span[text() = '查询']").click()

3)获取页面数据,写一个方法进行调用

def get_page_data01(self, dri):
    tab01 = self.driver.find_element(By.CSS_SELECTOR, "table.el-table__body")
    rows01 = tab01.find_elements(By.TAG_NAME, "tr")
    data01 = []
    # 遍历每一行
    for row01 in rows01:
        # 在每一行中获取所有单元格
        cells01 = row01.find_elements(By.TAG_NAME, 'td')
        # 将单元格的文本添加到列表中
        data01.append([cell.text for cell in cells01])
    return data01

调用方法获取每一页的数据

page_data = TestZhiku.get_page_data01(self, self.driver)
# 获取每一页的数据
while True:
    try:
        # 假设下一页按钮有特定的class名,根据实际情况调整选择器
        # element_to_be_clickable(locator)检查页面上指定的元素是否可见且可点击,可点击则返回该元素对象
        next_page_button = WebDriverWait(self.driver, 15).until(
            EC.element_to_be_clickable((By.CLASS_NAME, 'btn-next'))
        )
        next_page_button.click()
        print(time.ctime())
        time.sleep(3)
        # 继续获取数据
        page_data += TestZhiku.get_page_data01(self.driver)
    except:
        # 没有下一页了,退出循环
        break

4)对比查询到的数据是否正确,若查询到的数据不包含关键字,则查询功能有误

text04 = "测试"
ass04 = True
for i in page_data:
    if text04 not in i[3]:
        print("查询到不包含关键字的内容")
        ass04 = False
        break
self.assertTrue(ass04)

5)执行脚本

if __name__ == '__main__':
    unittest.main

6)若要出测试报告。加一下代码。放在另外的.py文件中

from HTMLTestRunner_cn import HTMLTestRunner
import unittest
import  time

# 测试用例存放位置
test_dir = './test_case'
# 批量执行
discovery = unittest.defaultTestLoader.discover(test_dir, pattern="test*.py")

if __name__ == '__main__':
    report_dir = './test_rep'
    now = time.strftime("%Y-%m-%d %H_%M_%S")
    report_name = report_dir + '/' + now + 'result.html'

    with open(report_name,'wb') as f:
        runner = HTMLTestRunner(stream=f, title="Test Report",description="ceshilogin")
        runner.run(discovery)

测试报告结果如下:


本文转载自: https://blog.csdn.net/ncll_LBL/article/details/140268438
版权归原作者 璐小土豆 所有, 如有侵权,请联系我们删除。

“python+selenium 自动化测试--完成的第一个查询功能测试用例”的评论:

还没有评论