当前位置:   article > 正文

手把手教你从0到1搭建web ui自动化框架(python3+selenium3+pytest)_ui自动化框架python+pytest

ui自动化框架python+pytest

-前期准备
-环境
-实战: 从0开始

前期准备
为更好的学习自动化框架搭建,你需要提前了解以下知识:
python基础知识
pytest单元测试框架
PO模式
selenium使用

环境
本次我们自动化环境为:
mac+python3+selenium3+pytest==6.2.4
(不管是win还是mac,网上环境安装教程很多,参考下安装即可)

-实战: 从0开始
接下来我们以这个系统的登陆页面作为demo,开始进行web UI框架搭建:
在这里插入图片描述
最开始,我们设计了一个test_login.py文件,里完成了登陆脚本的设计:

from selenium.webdriver.support.ui import WebDriverWait

url = 'xx'

class TestLogin():

    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.get(url)
        self.driver.maximize_window()

    def teardown(self):
        self.driver.close()

    #以下为login页面设计的case

    #case1:输入正确的用户名密码后页面跳转正常
    def test_is_null(self,name,password):
        self.driver.find_element(By.ID, 'user_name').send_keys(name)
        self.driver.find_element(By.ID, 'password').send_keys(password)
        self.driver.find_element(By.ID, 'submit-button').click()
        assert 'user/index' in self.driver.get_url(),'failed--用户名密码正确时登陆场景失败'
        print ('case pass')

    # case2:用户名/密码不匹配
    def test_not_match(self, name, password):
        pass

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

写了1,2个用例时我们觉得没什么,但是随着case数量的增到,我们意识到了问题的严重性:
1.不同的case明明是同一段代码,只是传参不一致,就需要重复写多次,即便复制/粘贴也累啊—》解决:参数化,实现数据分离–创建data层
2.系统中某个页面发生变化,我准备去修改下对应的页面,结果代码写的过于分散,同一个页面的数据分散到了不同py模块,每次都修改不全,严重影响后期维护成本–》解决:引用PO模式(page object)–创建page层
3.系统中存在公共模块(比如系统中存在一个上传下载功能),多个页面/多个case都要使用—》解决:创建一个公共模块(创建public层)
……
诸如此类的问题随着case不断增多的状况下会明显感觉得到,接下来我们就开始逐一解决:

参数化(data):
利用pytest框架提供的@pytest.mark.parametrize()来实现,代码及页面接口设计如下:
在这里插入图片描述
读取json文件的代码:

import os
import json

current_path = os.path.abspath(__file__)
path = os.path.dirname(current_path)

def get_json_data(specifypath):
    try:
        parent_path = os.path.dirname(current_path)
        path = f"{parent_path}/data/{specifypath}"
        with open(path) as file:
            data = json.load(file)
    
        return data
    except Exception as e:
        print (e)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

用例层调用data改造后的代码:
在这里插入图片描述引用PO模式(page object):
po模式:
简单来说,就是以一个页面作为一个对象,把一个页面的内容写成一个.py文件;
这个页面对象中包含内容:当前页面的元素定位及操作的整合;
po模式中会引用一个basepage.py,这个文件里面一般包含的是driver相关的操作,比如:elements相关的改造,简单粗暴点理解:就是把self.driver.xx相关的内容都写到这里就行;其他页面都会继承basepage.py中的内容。

按照上面逻辑我们继续改造代码:
basepage.py:
在这里插入图片描述
login_page.py
在这里插入图片描述
我们看下case层怎么引用:
在这里插入图片描述public层:
在这里插入图片描述
比如我登陆页面需要用到public中的内容,直接在login_page.py文件中继承即可使用public中的所有方法:
在这里插入图片描述
/以上就完成的框架设计/
框架设计核心:分层思想、PO模式
自动化框架设计一般都是设计都分为:page层、testcase层、public层、data层、report层(分层都比较灵活的,不管怎么分都是换汤不换药)
给大家看下完整的框架结构:
在这里插入图片描述
运行所有的case都放在这个run.sh的shell脚本里,后期做jenkins集成也只需要跑这个脚本即可:

echo 'start----------------'
pip install -r requirements.txt
pwd
pytest 
echo 'end----------------'
  • 1
  • 2
  • 3
  • 4
  • 5

关于report大家可以直接用pytest-html来实现,网上有很多教程参考;
后期做jenkins集成直接参考之前写的内容。
///done//

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/437981
推荐阅读
相关标签
  

闽ICP备14008679号