首页 > 编程语言 > 详细

pytest+python 项目初步实践

时间:2019-12-31 19:27:31      阅读:593      评论:0      收藏:0      [点我收藏+]

前言:在使用unittest 框架时,发现其两个缺点:

1、unittest 中每个测试用例执行时都要重新打开浏览器,无法实现一次性加载浏览器来执行所有用例(如:登录--》执行所有用例--》退出);

2、unittest框架局限性,driver不能跨py模块使用。

为了解决以上问题,于是就去学习了pytest框架并做了初步实践,如果写的不好,还请大家多指教!

 

场景及操作步骤:

1、登录(需要输入用户名、密码,点击登录按钮;登录成功后获取登录结果)

2、新建用户 (登录以后可以新建用户)

3、关闭浏览器

 

一、pytest 的安装

1、安装

命令:pip install -U pytest

技术分享图片

 2、查看版本

命令:pip show pytest

技术分享图片

 

二、编写代码

1、项目目录

case : 存放测试用例

common : 存放公共文件

page: 封装页面业务

技术分享图片

 2、base.py  文件,封装基本操作方法

# -*- coding=utf-8 -*-
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException



class Base(object):

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

    def find(self, locator):
        """locator = ("id","kw"),查找某元素"""
        try:
            element = WebDriverWait(self.driver, 10, 1).until(lambda x: x.find_element(*locator))
            return element
        except TimeoutException as msg:
            print("元素不存在")

    def send(self, locator, text):
        """输入框传值,元素不存在时跳过执行"""
        try:
            self.find(locator).clear()
            self.find(locator).send_keys(text)
        except TimeoutException as msg:
            # print("元素不存在",msg)
            pass

    def click(self,locator):
        """点击事件"""
        self.find(locator).click()

3、login.py  文件,登录的业务代码

技术分享图片

# -*- coding=utf-8 -*-
from selenium import webdriver
import time
from common.base import Base


class Login(Base):

    def login(self, username, password):
        """登录"""
        user = (name, loginName)
        self.send(user, username)
        pwd = (name, loginPassWord)
        self.send(pwd, password)
        submit = (id, loginBtn)
        self.click(submit)
        time.sleep(2)
        content = (id, title)
        res = self.find(content).text
        print(已成功登录, res)


if __name__ == __main__:
    driver = webdriver.Chrome()
    url = ""
    driver.get(url)

4、adduser.py  文件  登录后添加用户的业务代码

技术分享图片

# -*- coding=utf-8 -*-
from selenium import webdriver
import time
from common.base import Base
import time


class AddUser(Base):

    def add_user(self, user, phone, password, repassword):
        """登录后添加用户"""
        yonghu = (id, uname)
        self.send(yonghu, user)
        shouji = (id, uphone)
        self.send(shouji, phone)
        mima = (id, password)
        self.send(mima, password)
        remima = (id, password2)
        self.send(remima, repassword)
        time.sleep(1)
        button = (id, savebtn2)
        self.click(button)


if __name__ == __main__:
    driver = webdriver.Chrome()
    url = ""
    driver.get(url)

5、conftest.py  文件

# -*- coding=utf-8 -*-
import pytest
from selenium import webdriver
from page.login import Login
import time


@pytest.fixture(scope=session)
def driver():
    global _driver
    print(------------open browser------------)
    _driver = webdriver.Chrome()
    _driver.maximize_window()
    _driver.implicitly_wait(10)
    yield _driver
    print(------------close browser------------)
    _driver.quit()


@pytest.fixture(scope=session)
def login(driver):
    """登录"""
    url = "登录的url地址"
    driver.get(url)
    time.sleep(5)
    login_system = Login(driver)
    login_system.login("13166666666", "666666")
    yield
    driver.delete_all_cookies()

6、测试用例文件:test_user_one.py、test_user_two.py ,两个文件内容一样,只是模拟两个用例。

import pytest
from page.adduser import AddUser


class TestOne(object):

    def test_01(self, login, driver):
        url = "新增用户页面的url地址"
        driver.get(url)
        user = AddUser(driver)
        user.add_user(test, 13122222224, 666666, 666666)


if __name__ == __main__:
    pytest.main(["-s", "test_user_one.py"])

 

三、运行测试用例

1、进入项目根目录

2、输入命令:

pytest case  (运行多个测试用例)

pytest  case/test_user_one.py (运行单个用例)

技术分享图片

 

-s : 显示打印信息

技术分享图片

 

 

pytest+python 项目初步实践

原文:https://www.cnblogs.com/yudx/p/12126455.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!