web自动化测试框架搭建(python+selenium+pytest+pom+ddt)

2023-10-27

本篇文件利用当下流行的pom设计模式设置测试框架,编写测试用例,生成测试报告,并最终jenkins集成。

一、selenium

selenium是一个开源的web ui自动化测试工具,详细就不再过多介绍了。

二、环境搭建

关于环境搭建,非常简单,可以参考我之前的博客。selenium新手入门

三、po设计

po(pom)模式:页面对象模型,把项目中的页面,封装成一个一个类,一个页面对应一个类。再通过实例化这个类的对象,去调用类里面的属性和方法。
好处:
提高代码维护
代码重复利用

3.1 po分层

3.1.1 基础层:

基础层:放封装的selenium基础方法
代码实现:


class BasePage:

    def __init__(self,driver):
        self.driver=driver


    # 打开页面
    def into_testin(self,url):
        self.driver.get(url)

    # 定位元素
    def locate_element(self,args):
        return self.driver.find_element(*args)

    #定位一组元素
    def locate_eles(self,args):
        return self.driver.find_elements(*args)

    #输入值
    def input_(self,args,text):
        self.locate_element(args).send_keys(text)

    #点击按钮
    def click_button(self,args):
        self.locate_element(args).click()

3.1.2 页面对象层

页面对象层:pageobject,存放页面的元素定位和操作流程
登录模块代码实现:

from time import sleep
from basepage.base_page import BasePage
from selenium.webdriver.common.by import By


class LoginPage(BasePage):

    '''定位页面元素'''
    
    #url
    testin_url='https://www.testin.cn/account/login.htm'
    
    #输入用户名和密码
    username_loc=(By.ID,'email')
    password_loc=(By.ID,'pwd')

    #点击登录按钮
    login_button=(By.ID,"submitBtn")

    #登录邮箱操作流程
    def testin_login(self,username='18170710339',password='Quyun1230'):
        self.into_testin(self.testin_url)
        sleep(2)
        self.locate_element(self.username_loc).send_keys(username)
        sleep(1)
        self.locate_element(self.password_loc).send_keys(password)
        sleep(1)
        self.click_button(self.login_button)

选择手机代码实现:

from time import sleep
from basepage.base_page import BasePage
from selenium.webdriver.common.by import By

class SelectPage(BasePage):

    '''定位页面元素'''
    #定位弹窗
    win_loc=(By.XPATH,"//div[@class='modal-body']/i")
    #定位iphone
    ip_12pro_loc=(By.XPATH,'//div[@id="collapse_1"]/div/dl[1]/dd/div/span[2]/label/span')
    # 定位iphone12 pro max
    ip_loc = (By.XPATH, "//button[@device-source='00008101-0004102C3468001E']")

    #定位品牌
    an_loc=(By.XPATH,'//div[@id="collapse_1"]/div/dl[2]/dd/div/span[3]/label/span')
    # 定位安卓魅族
    mz_loc = (By.XPATH, "//button[@device-source='864968050654030']")

    #定位上市时间
    onlin_loc=(By.XPATH,'//div[@id="collapse_1"]/div/dl[6]/dd/div/span[5]/label/span')
    # 定位上市时间的华为荣耀
    sj_loc = (By.XPATH, "//button[@device-source='7d22ebd8f913637d']")

    #定位文本框
    text_detail=(By.XPATH,'//div[@id="modal_quota_alert"]/div/div/div[2]')
    #定位取消框
    qx_but_loc=(By.XPATH,'//div[@id="modal_quota_alert"]/div/div/div[3]/button[1]')

    #点击登录按钮
    login_button=(By.ID,"submitBtn")

    #登录邮箱操作流程
    def testin_select_01_iphone(self):
        sleep(1)
        self.locate_element(self.ip_12pro_loc).click()
        sleep(1)
        self.locate_element(self.ip_loc).click()
        sleep(1)
        as_text=self.locate_element(self.text_detail).text
        '''断言信息正确'''
        assert as_text==u'您的配额已不足,是否前往购买?'
        self.locate_element(self.qx_but_loc).click()
        sleep(2)

    def testin_select_02_android(self):
        sleep(1)
        self.locate_element(self.an_loc).click()
        sleep(1)
        self.locate_element(self.mz_loc).click()
        sleep(1)
        as_text = self.locate_element(self.text_detail).text
        assert as_text == u'您的配额已不足,是否前往购买?'
        self.locate_element(self.qx_but_loc).click()
        sleep(2)

    def testin_select_03_onlin_time(self):
        sleep(1)
        self.locate_element(self.onlin_loc).click()
        sleep(1)
        self.locate_element(self.sj_loc).click()
        sleep(1)
        as_text = self.locate_element(self.text_detail).text
        assert as_text == u'您的配额已不足,是否前往购买?'
        self.locate_element(self.qx_but_loc).click()
        sleep(2)

3.1.3 测试用例层

测试用例层:存放测试用例及数据
代码实现:

import pytest
from time import sleep
from selenium import webdriver
from common.excel import read_excel
from pageobject.login_page import LoginPage
from pageobject.select_phone import SelectPage

class TestTestIn:

    #打开浏览器
    def setup(self) -> None:
        self.driver=webdriver.Chrome()
        driver=self.driver

    def teardown(self) -> None:
        sleep(1)
        self.driver.close()

    '''利用excel导入登录测试数据'''
    @pytest.mark.parametrize('case',read_excel('./data/data.xlsx','login'))
    def test_01_login(self,case):
        '''测试登录模块'''
        xh,case_name,username,password,is_exc,result,bz=case
        lp=LoginPage(self.driver)
        lp.testin_login(username,password)

    def test_02_select_iphone_12(self):
        '''测试根据品牌选择手机'''
        lp = LoginPage(self.driver)
        lp.testin_login()
        ps=SelectPage(self.driver)
        ps.testin_select_01_iphone()


    def test_03_select_androi_sys(self):
        '''测试根据安卓系统选择手机'''
        lp = LoginPage(self.driver)
        lp.testin_login()
        ps=SelectPage(self.driver)
        ps.testin_select_02_android()

    def test_04_select_online_time(self):
        '''测试根据上市时间来选择手机'''
        lp = LoginPage(self.driver)
        lp.testin_login()
        ps=SelectPage(self.driver)
        ps.testin_select_03_onlin_time()

3.1.4 创建测试数据

登录模块,我们用到了数据驱动,我们先创建一个目录,如data,里面创建一个excel表,添加相应数据,如:
在这里插入图片描述
excel表中如下:
在这里插入图片描述

3.1.5 创建读取excel目录

创建一个common目录,再创建一个read_excel的文件:
在这里插入图片描述
代码如下:

import openpyxl

def read_excel(excel_dir,sheet_name):
    '''读取excel'''

    #加载目录
    ex=openpyxl.load_workbook(excel_dir)

    #获取sheet页
    sheet=ex[sheet_name]

    #打印表最大行和列
    # print(sheet.max_row,sheet.max_column)
    # print(sheet.cell(2,1).value)
    #循环行和列
    sheet_list=[]
    for row in range(2,sheet.max_row+1):
        row_list=[]
        for col in range(1,sheet.max_column+1):
            row_list.append(sheet.cell(row,col).value)
        sheet_list.append(row_list)
    return sheet_list

if __name__ == '__main__':
    read_excel('../data/data.xlsx','login')

3.2 生成测试报告

3.2.1 创建报告目录

本次我们使用pytest测试框架,所以,当然使用allure测试报告了。如果不熟悉allure报告的朋友,可以参考我上一篇详细的介绍:单元测试框架–pytest从入门到精通2021最新教程
先创建两个目录:一个临时目录:temp和存放测试报告的reports:
在这里插入图片描述

3.2.2 创建报告配置文件

新建一个pytest.ini的文件:

[pytest]
#
addopts=-vs --alluredir ./temp
testpaths=./testcase
python_files=test_*.py
python_classes=Test*
python_functions=test_*

3.3 运行测试

根据上面的操作,最终会形成这样的目录:
在这里插入图片描述

3.3.1 运行用例:

创建一个run_test.py文件:

import os
import pytest
from time import sleep

if __name__ == '__main__':
    pytest.main()
    sleep(2)
    os.system('allure generate ./temp -o ./reports --clean')

3.3.2 查看运行结果

3.3.2.1 编辑器中结果

在这里插入图片描述
可以看出,结果全部运行通过。

3.3.2.2 查看测试报告

查看reports目录中的html测试,用浏览器打开:
在这里插入图片描述
在这里插入图片描述
测试用例全部通过。

四、jenkins集成

如果不太熟悉jenkins的朋友,可以参考我之前的博客,有详细搭建教程:jenkins持续集成的使用(含RF自动执行自动化)

4.1 启动jenkins

cmd中进入jenkins目录,执行命令:

java -jar jenkins.war

在这里插入图片描述
jenkins启动成功

4.2 创建任务

进入jenkins,创建一个任务:
在这里插入图片描述
添加项目目录:
在这里插入图片描述
设置运行命令:
在这里插入图片描述
保存,创建成功。
任务创建成功后, 执行运行操作。
在这里插入图片描述
可以看到已经在运行了。
在这里插入图片描述
查看运行结果:
在这里插入图片描述
运行成功。测试报告,同上,就不再次看了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

web自动化测试框架搭建(python+selenium+pytest+pom+ddt) 的相关文章

随机推荐

  • Ragnar Locker勒索软件团伙在Facebook上刊登Campari黑客的广告

    Ragnar Locker勒索软件运营商已经开始在Facebook上利用广告迫使受害者支付赎金 在2019年11月 勒索软件运营商已开始采用一种新的双重勒索策略 该策略首先由迷宫团伙 Maze gang 使用 即在加密受感染的系统之前 威胁
  • jsp里怎么获取input里的值 在function里用

    第一种 通过getElementById找到input节点 然后获取value属性 1 定义一个input节点
  • 使用 CloudFlare 免费 CDN 加速 WordPress

    具体使用参考文章 CloudFlare 免费 CDN 加速使用方法 你似乎来到了没有知识存在的荒原 知乎 CloudFlare 免费 CDN 优化指南 CloudFlare免费CDN优化指南 知乎 CloudFlare 加速 WordPre
  • Wireshark 抓包工具使用记录

    1 搜索 Wireshark 安装 注意要中途要安装 pcap 否则会提示 找不到网络 安装过程全部默认选项 2 抓取移动端软件接口包 在安装了Winpcap 的电脑上 分一个wifi 360wifi等等 用手机连接这个wifi 然后启动
  • Docker部署单点Elasticsearch与Kibana

    一 创建网络 因为需要部署kibana容器 因此需要让es和kibana容器互联 这里创建一个网络 docker network create es net 创建一个网络名称为 es net 二 拉取并加载镜像 方式一 docker pul
  • 台词生成器 (html5 版)

    最近经常看到别人 PS 来恶搞 泰囧 电影中的台词 觉得挺好玩的 先上效果图 就想用 html5 自己也做一个来玩玩 查了下 API 发现还是挺简单的 context fillText text x y width 参数 text 要生成的
  • Eclipse快捷键大全

    快捷键 Eclipse中有如下一些和编辑相关的快捷键 1 ALT 此快捷键为用户编辑的好帮手 能为用户提供内容的辅助 不要为记不全方法和属性名称犯愁 当记不全类 方法和属性的名字时 多体验一下 ALT 快捷键带来的好处吧 2 Ctrl O
  • Spring Boot之 Controller 接收参数和返回数据总结(包括上传、下载文件)

    转载自 https blog csdn net jy02268879 article details 82830789 一 接收参数 postman发送 1 form表单 RequestParam name String name 会把传递
  • React入门教程之井字棋(四)——时间旅行

    接下来是最后一个练习 我们将实现 回到过去 的功能 从而在游戏里跳回到历史步骤 保存历史记录 如果我们直接修改了 square 数组 实现时间旅行就会变得很棘手了 不过 我们可以使用 slice 函数为每一步创建 squares 数组的副本
  • Memcached的安装与基础语法

    Memcached Memcached 简介 Memcached是一个自由开源的 高性能 分布式内存对象缓存系统 Memcached简洁而强大 它的简洁设计便于快速开发 减轻开发难度 解决了大数据量缓存的很多问题 它的API兼容大部分流行的
  • JS校验数值

    JS校验数值的范围 大小及长度 function isInt str maxlen min max var pattern 0 1 9 d 非负整数 正整数 0 if str null str if pattern test str fal
  • 链接的请求方式 是get

    超链接的请求是get Get 是以实体的方式得到由请求URI所指定资源的信息 如果请求URI只是一个数据产生过程 那么最终要在响应实体中返回的是处理过程的结果所指向的资源 而不是处理过程的描述
  • win10下对编译完成后opencv_cuda进行移植

    系列文章目录 win10下Opencv源码编译支持CUDA加速的Python环境 超级详细教程 win10下对编译完成后opencv cuda进行移植 文章目录 系列文章目录 一 opencv python环境配置 二 opencv pyt
  • 01、虚拟机(VMware )部署

    一 VMware 概述 VMware是一家提供虚拟化解决方案的领先公司 其产品被广泛应用于企业和个人用户的计算环境中 VMware的虚拟化技术可以将物理计算资源 如服务器 存储和网络 抽象成虚拟化的资源 从而提供更高的灵活性 可扩展性和资源
  • Hbase Coprocessor 协处理器 与 JavaAPI

    协处理器概念 一 协处理器有两种 observer 和 endpoint 1 observer协处理器 Observer 类似于传统数据库中的触发器 当发生某些事件的时候这类协处理器会被 Server 端调用 Observer Coproc
  • 2021-08-26

    安装opencv python库 安装opencv python库 安装opencv python库 curl https bootstrap pypa io pip 2 7 get pip py o get pip py python g
  • 升级 Node 版本教程

    文章目录 Window 系统 Mac 或 Linux系统 Window 系统 window系统升级node只能到node官网下载window安装包来覆盖之前的node node 安装教程附下载地址 https blog csdn net q
  • selenium学习指南

    Selenium 是一套 Web网站 的程序自动化操作 解决方案 通过它 我们可以写出自动化程序 像人一样在浏览器里操作web界面 比如点击界面按钮 在文本框中输入文字 等操作 而且还能从web界面获取信息 比如获取火车 汽车票务信息 招聘
  • 使用Python,OpenCV制作图像Mask——截取ROIs及构建透明的叠加层

    使用Python OpenCV制作图像Mask 截取ROIs及构建透明的叠加层 1 效果图 2 源码 参考 这篇博客将介绍如何使用OpenCV制作Mask图像掩码 使用位运算和图像掩码允许我们只关注图像中感兴趣的部分 截取出任意区域的ROI
  • web自动化测试框架搭建(python+selenium+pytest+pom+ddt)

    本篇文件利用当下流行的pom设计模式设置测试框架 编写测试用例 生成测试报告 并最终jenkins集成 一 selenium selenium是一个开源的web ui自动化测试工具 详细就不再过多介绍了 二 环境搭建 关于环境搭建 非常简单