Python 测开28期 - WL - 学习笔记 - web 自动化用例录制与分析

用例录制

  • seleniumIDE 用例录制使用场景
    • 刚开始入门UI自动化测试
    • 团队代码基础较差
    • 技术成长之后学习价值不高
seleniumIDE 下载与安装
启动
  • 安装完成后,通过在浏览器的菜单栏中点击它的图标来启动
    • 如果没有看到图标,先确保是否安装了seleniumIDE扩展插件
    • 通过以下链接访问所有插件
      • Chrome:chrome://extensions
      • Firefox:about:addons

seleniumIDE 常用功能

    1. 新建、保存、打开
    1. 开始和停止录制
    1. 运行8中的所有的实例
    1. 运行单个实例
    1. 调式模式
    1. 调试案例的运行速度
    1. 要录制的网址
    1. 实例列表
    1. 动作、目标、值
    1. 对单条命令的解释
    1. 运行日志

用例录制

    1. 点击打开插件seleniumIDE
    1. 点击 vreate a new project 进行新脚本录制
    1. 输入新脚本的名称,点击ok
    1. 点击右上角的按钮 REC,开始录制
    1. 输入要打开网页地址,点击 start recording开始录制
    1. 自动打开网页后,开始网页操作
    1. 操作完成后,点击stop recording停止录制,输入脚本名称保存,即可在左侧列表中看到录制成功的脚本
    1. 点击倒三角的回放按钮,即可打开网页自动回放该脚本
    1. 录制了多个用例后,点击倒三角的 run all可执行所有已成功录制的脚本
    1. 点击脚本后的三个点,点击export可导出脚本,选择对应语言即可
    1. 将导出的py文件放pycharm,即可查看脚本内容
    1. 选择 test suites,然后把录制好的多个脚本都添加到 default suite中,然后可以一起导出
    1. 插件中可以给脚本中插入等待等操作,command

用例分析

用例结构

  • 结构
    • 用例标题
    • 前提条件
    • 用例步骤
    • 预期结果
    • 实际结果
用例标题 类型 前提条件 用例步骤 预期结果 实际结果
搜狗搜索功能 正例 进入搜狗页面 1. 输入搜索关键词
2. 按下回车键
1. 搜索成功
2. 搜索结果列表包含关键字
  • 用例结构对比
用例结构 自动化测试用例 作用
用例标题 测试包、文件、类、方法名称 用例的唯一标识
前提条件 setup、setup_class (Pytest);
BeforeEach、BeforeAll (JUnit)
测试用例前的准备动作,
比如读取数据或者driver的初始化
用例步骤 测试方法内的代码逻辑 测试用例具体的步骤行为
预期结果 assert 实际结果 = 预期结果 断言,印证用例是否执行成功
实际结果 assert 实际结果 = 预期结果 断言,印证用例是否执行成功
后置动作 teardown、teardown_class (Pytest);
@AfterEach@AfterAll (JUnit)
脏数据清理、关闭 driver 进程

录制用例分析

IDE 录制脚本
  • 脚本步骤:
    • 访问搜狗网站
    • 搜索框输入“霍格沃兹测试开发”
    • 点击搜索按钮
  • 脚本代码
# Generated by Selenium IDE 
import pytest 
import time 
import json 
from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.common.action_chains import ActionChains 
from selenium.webdriver.support import expected_conditions 
from selenium.webdriver.support.wait import WebDriverWait 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities  
class Test():  

    def setup_method(self, method):     
        self.driver = webdriver.Chrome()  
        self.vars = {}   
        
    def teardown_method(self, method): 
        self.driver.quit()   
        
    def test_sougou(self):     
        # 打开网页,设置窗口  
        self.driver.get("https://www.sogou.com/")  
        self.driver.set_window_size(1235, 693)  
        # 输入搜索信息  
        self.driver.find_element(By.ID, "query").click()  
        self.driver.find_element(By.ID,"query").send_keys("霍格沃兹测试开发")  
        # 点击搜索  
        self.driver.find_element(By.ID, "stb").click()  
        element = self.driver.find_element(By.ID, "stb") 
        actions = ActionChains(self.driver)   
        actions.move_to_element(element).perform()

录制用例优化

  • 增加断言信息,判断实际结果和预期结果是否一致
# Generated by Selenium IDE
import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

class TestDemo():  

    def setup_method(self, method):    
        self.driver = webdriver.Chrome()    
        self.vars = {}    
        
    def teardown_method(self, method):
        self.driver.quit()    
        
    def test_demo(self):    
        # 打开网页    
        self.driver.get("https://www.sogou.com/")    
        self.driver.set_window_size(1157, 895)    
        # 输入搜索信息    
        self.driver.find_element(By.ID, "query").click()    
        self.driver.find_element(By.ID, "query").send_keys("霍格沃兹测试开发")    
        # 点击搜索    
        self.driver.find_element(By.ID, "stb").click()    
        element = self.driver.find_element(By.ID, "stb")    
        actions = ActionChains(self.driver)    
        actions.move_to_element(element).perform()    
        # 增加断言    
        # 判断搜索结果列表是否包含 霍格沃兹   
        res_element = self.driver.find_element(By.CSS_SELECTOR, "#sogou_vr_30000000_0 
> em")    
        # 获取定位的文本信息    
        # 判断实际获取到的搜索框展示列表和预期是否一致    
        assert res_element.text == "霍格沃兹测试开发"