Selenium + Python 自动化测试15(模块化测试)

我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。

上一篇我们讨论了使用SMTP 对象的sendmail 发送HTML报告的方法。

本篇文章我们接着讲测试代码的一些优化,提高我们测试代码的易读性,维护方便性。大家也都多多少少有些了解,很多自动化测试方案无法在实际工作中落地,有一个重要的原因就是维护成功太高。导致维护测试脚本的时间比手动执行的时间还要长,不断优化代码。我们可以使用模块测试的思想,避免同一模块重复编写来提高效率。

1、自动化测试模型

自动化测试模型一般包括:线性测试、模块化驱动测试、数据驱动、关键字驱动、行为驱动、page object 设计模式等

我们今天讨论一下相对简单的模块化测试。

首先看一下我们之间编写的测试代码:

我们编写了2个文件,每个文件的内容类似:

复制代码
import time

importunittest

fromselenium importwebdriver



defdriverfunc():
returnwebdriver.Chrome("C:\\Users\\dewi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe")



#使用unittest的框架,每个案例的标准形式

class LoginTest(unittest.TestCase):
defsetUp(self):self.driver =driverfunc()

        print("登录测试开始")



    #输入正确的密码登录成功测试

    def test_login_Y(self):driver =self.driver

        username ="standard_user"

        password ="secret_sauce"

        print("登录的用户名是:%s,密码是:%s"%(username,password))

        #打开浏览器,并最大化

        driver.get("https://www.saucedemo.com/")

        driver.maximize_window()

        time.sleep(3)



        #输入用户名,

        driver.find_element_by_name("user-name").send_keys(username)  # by name 定位

        #输入密码

        driver.find_element_by_name("password").send_keys(password)  # by name 定位

        #点击登录按钮

        driver.find_element_by_id("login-button").click()  # by ID 定位



        time.sleep(3)

        #加入断言  //*[@id="header_container"]/div[1]/div[2]/div

        # 验证有显示:Products

        UIResult =driver.find_element_by_xpath('//*[@id="header_container"]/div[2]/span').text

        self.assertEqual("Products", UIResult, "密码正确登录验证失败,fail")



   



    deftearDown(self):#浏览器退出

        self.driver.quit()

        print("登录测试结束")

可以查看上面的代码,每一条测试用例是独立的,一步一步执行测试。其实就是线性测试模型。这种模型的优势是每一个脚本都是独立的。任何一个测试用例可以拿出来单独的执行。但是,确定也是很明显,就是维护成本很高。若是登录的步骤有改,所有脚本都要改一遍。

为了解决线性测试的缺点,可以考虑使用模块化测试。

2、模块化测试

我们来实际做一下模块化测试。模块化的思路其实也是很简单的,类似于编程语言模块化的思想,就是把重复的操作独立成公共模块。在执行测试用例时就去调用。

这样,我们就可以更改上面的测试用例。

编写login.py

复制代码
# coding=utf-8

#****************登录模块*******************

import time

fromselenium importwebdriver

defdriver_func():
returnwebdriver.Chrome("C:\\Users\\dewi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe")


deflogin(username,password):driver =driver_func()

        # 打开浏览器,并最大化

        driver.get("https://www.saucedemo.com/")

        driver.maximize_window()

        time.sleep(3)

        # 输入用户名,

        driver.find_element_by_name("user-name").send_keys(username)  # by name 定位

        # 输入密码

        driver.find_element_by_name("password").send_keys(password)  # by name 定位

        # 点击登录按钮

        driver.find_element_by_id("login-button").click()  # by ID 定位

        return driver

然后,重新编写登录测试用例:

复制代码
#使用unittest的框架,每个案例的标准形式

class LoginTest(unittest.TestCase):
defsetUp(self):print("登录测试开始")


    #输入正确的密码登录成功测试

    def test_login_Y(self):username ="standard_user"

        password ="secret_sauce"

        print("登录的用户名是:%s,密码是:%s"%(username,password))

        driver=login.login(username,password)  #调用登录函数

        time.sleep(3)

        #加入断言  //*[@id="header_container"]/div[1]/div[2]/div

        # 验证有显示:Products

        UIResult =driver.find_element_by_xpath('//*[@id="header_container"]/div[2]/span').text

        self.assertEqual("Products", UIResult, "密码正确登录验证失败,fail")

        self.driver=driver

    deftearDown(self):#浏览器退出

        self.driver.quit()

        print("登录测试结束")

今天就先学习到这里。

每天进步一点点,加油!

相关推荐
2601_962077718 分钟前
基于Python与NLP的新闻事件信息抽取实战:从NER到时空标准化
python·nlp·transformers·spacy·新闻事件抽取
JavaPub-rodert28 分钟前
LangChain 从入门到 Agent 实战:用 Python 搭建一个真正能调用工具和知识库的 AI 助手
人工智能·python·langchain
郝学胜-神的一滴44 分钟前
Qt 高级编程 045:坐标体系深度实战
开发语言·c++·windows·python·qt·程序人生
m0_380743872 小时前
给 OpenAI API 调用加上模型切换:GPT-5.1 和 Codex 的配置实践
人工智能·python·gpt
2601_962297482 小时前
在python3中、下列输出变量a的正确写法是_2020超星大数据Python免费答案
数据结构·python·算法·编程·字符串操作
“AI国潮设计-小江”2 小时前
Python实战 | SDXL精准控制“普宁英歌舞×星空蛋糕”IP落地,附核心Prompt与商用授权思路
开发语言·人工智能·python·prompt·aigc
公爵爱学习2 小时前
无人机视觉识别前序-Linux-YOLO安装
python·yolo·计算机视觉·conda·无人机
2601_962295332 小时前
使用python实现一个浏览器自动化的脚本
python·脚本·rpa·浏览器自动化·操作
小刘在重生~3 小时前
Java常用类|String类详解 + BigDecimal精准计算(含面试题)
java·开发语言·python
大汉堡玩测试4 小时前
langfuse测试实战(一): 配置一个简单的项目快速落地
python·测试工具