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

4 篇文章 0 订阅
2 篇文章 1 订阅

本篇文件利用当下流行的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,创建一个任务:
在这里插入图片描述
添加项目目录:
在这里插入图片描述
设置运行命令:
在这里插入图片描述
保存,创建成功。
任务创建成功后, 执行运行操作。
在这里插入图片描述
可以看到已经在运行了。
在这里插入图片描述
查看运行结果:
在这里插入图片描述
运行成功。测试报告,同上,就不再次看了。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值