如何将自动化测试秒杀繁琐操作?试试PO模式设计框架_po模式自动化框架

51 阅读3分钟

(2)common:公共类,里面编写公共使用到的方法。

(3)config:配置文件存储目录。

(4)data:存储测试使用到测试数据。

(5)page:对象层,编写具体的业务逻辑,把页面每一个操作行为单独的写一个方法或者是函数。

(6)report:测试报告目录,主要用来存放测试报告。

(7)test:测试层,里面主要是测试模块,也可以说是每个测试的场景的代码。

(8)utils:工具类,存放工具,如文件处理、说明文档等。

(9)run:运行层:整个自动化测试的运行目录。

页面对象设计模式:
base基础层:
在该层中主要编写了基础代码。在该层主要定义了类WebUI,在这个类中编写了单个元素和多个元素定位的方法。

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# author:张红
 
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.expected_conditions import NoSuchElementException
import time as t
 
class WebUI(object):
    def __init__(self,driver):
        #webdriver实例化后的对象
        self.driver=driver
 
    def findElement(self,*args):
        '''
        单个元素定位的方式
        :param args:
        :return: 它是一个元组,需要带上具体什么方式定位元素属性以及元素属性的值
        '''
        try:
            return self.driver.find_element(*args)
        except NoSuchElementException as e:
            return e.args[0]
 
    def findsElement(self,*args,index):
        '''
        多个元素定位的方式
        :param args:
        :param index: 被定位的目标索引值
        :return: 它是一个元组,需要带上具体什么方式定位元素属性以及元素属性的值
        '''
        try:
            return self.driver.find_elements(*args)[index]
        except NoSuchElementException as e:
            return e.args[0]

page对象层:
在这一层的类直接继承了基础层的类,以类属性的方法指明每个操作元素属性的值,然后依据操作步骤编写对应的方法,(比如关于登录的操作:输入用户名、输入密码,点击登录,获取文本的信息操作会在实例中实现的登录操作,然后把每个登录操作封装成一个方法,这样实现登录测试用例直接调用,返回失败信息---其中形式参数会在测试层赋值)

注意:获取文件信息的方法,要有return返回值否则在测试层断言时获取不到文本信息,数据属性和方法名字不要一样

 test:测试层
在这里首先需要导入对象层中的类和unittest单元测试框架,在测试类中,继承了unittest.TestCase和对象层中的类,TestCase是由于在编写自动化测试的用例中,用到的测试固件、测试断言和测试执行都是需要它中的方法,而对象层中的类包含对象层中的测试操作步骤的方法,继承后可以直接进行调用。

注意事项:

1、在编写用例的时候需要添加备注信息,明确表示该用例是测试的哪个点,验证的哪个场景.

2、测试模块都是以test_开头,测试方法也是以test_开头的

#! /usr/bin/env python

-*- coding:utf-8 -*-

author:张红

from page.sina import *

import  unittest

from selenium import  webdriver

import time as t

from page.init import *

class SinaTest(Init,Sina):

    def test_username_null(self):

        self.login(username='',password='12345')

        t.sleep(3)

        # 验证邮箱名为空

        self.assertEqual(self.getUserError(),'请输入邮箱名')

        t.sleep(3)

    def test_username_supportChinese(self):

        self.login(username='中国',password='12345')

        t.sleep(3)

        # 验证邮箱名不支持中文

        self.assertEqual(self.getUserError(),'邮箱名不支持中文')

        t.sleep(3)

    def test_username_formatError(self):

        self.login(username='123',password='12345')

        t.sleep(3)

        # 验证邮箱名格式不正确

        self.assertEqual(self.getUserError(),'您输入的邮箱名格式不正确')

    def test_password_null(self):

        self.login(username='15102903662@sina.com',password='')

        t.sleep(3)

        # 验证密码为空

        self.assertEqual(self.getPassError(),'请输入密码')

        t.sleep(3)

    def test_login_error(self):

        self.login(username='15102903662@sina.com',password='724225')

        t.sleep(3)

        # 验证用户名错误

        self.assertEqual(self.getUserError(),'登录名或密码错误')