pytest

pytest与unittest区别
image.png
pytest.ini文件,该配置文件可更改pytest自动发现测试模块和测试方法的类型
[pytest]

#以test开头的文件均可被发现
python_files = test*.py  

#以test,check开头和以test结尾的方法,均可被发现
python_functions =
    test*
    *test
    check*

#以Test,Check开头的类,均可被发现
python_classes =
    Test*
    *Check
pytest收集测试用例的规则:
image.png

1.默认从当前目录总搜集测试用例,即在哪个目录下运行pytest命令,则从哪个目录当中搜索;
2.搜索规则:

  • 符合命名规则 test_.py或者_test.py文件
  • 以test开头的函数名
  • 以Test开头的测试类(没有 _ _ init _ _函数)当中,以test开头的函数
pytest.mark

对测试用例打标签,在运行测试用例的时候,可根据标签名来过滤要运行的用例。

  1. 使用方法
  • 在测试用例/测试类签名加上:@pytest.mark.标记名
  • 执行的先后顺序,是函数的顺序。
示例:
@pytest.mark.smoke
可在一个用例上打多个标签。多次使用@pytest.mark.标签名即可。
示例:
@pytest.mark.smoke
@pytest.mark.demo
def test_ demo():
  print(“我是示例啦! ! !“)

在test_invest.py文件打标签

"""
    投标的测试用例
"""

#正常用例
#前提条件,尽量不要依赖测试环境的测试数据,一定要自己造

# 1.用户已登陆
# 2.有能够投资的标,如果没有标,则先加标。通过接口的方式加标
# 3.用户有余额可以投

#步骤
#1.在首页选标投资 - 不根据标名,根据抢投标。默认第一个标
#2.标页面 - 获取投资钱的用户余额
#3.标页面 - 输入投资金额,点击投资按钮
  #3.1一次性充值一亿
  #3.2接口方式:查询当前用户还有多少钱,大于充值数不用充值,小于充值金额,使用接口充值

#4.标页面 - 点击成功的弹出框 - 查看并激活,进入个人页面


#断言
#钱 投资后的金额,是不是少了投资的量
#个人页面 - 获取投资后的金额
#投资前的金额 - 投资后的金额 = 投资金额
#投资记录是否正确
#利息是否正确

#异常用例:非常好创造环境
import time
import unittest
import logging
from time import time

from ddt import ddt,data,unpack
from selenium import webdriver
from TestDatas import Common_Datas as CD
from PageObject.login_page import LoginPage
from PageObject.index_page import InDexPage
from PageObject.bid_page import BidPage
from TestDatas import invest_data as ID
from PageObject.user_page import UserPage
import pytest


class TestInvest(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        #初始化浏览器回话
        logging.info("=======用例类前置:初始化浏览器会话,登陆前程贷系统========")
        cls.driver = webdriver.Firefox()
        cls.driver.maximize_window()
        cls.driver.get(CD.web_login_url)
        LoginPage(cls.driver).login(CD.user,CD.passwd)
        # 首页 - 选一个标来投资 - 直接选第一个
        InDexPage(cls.driver).click_first_bid()
        cls.bid_page = BidPage(cls.driver)

    @classmethod
    def tearDownClass(cls):
        logging.info("====用例类后置,关闭浏览器会话,清理环境====")
        cls.driver.quit()

    def tearDown(self):
        logging.info("====每一个用例后置:刷新当前页面====")
        self.driver.refresh()
        time.sleep(0.5)

    @pytest.mark.smoke
    def test_invest_1_success(self):
        logging.info("====投资用例:正常场景投资成功====")
        #标页面 - 获取投资前的个人余额
        userMoney_beforInvest = self.bid_page.get_user_money()
        #标页面 - 输入投资金额,点击投资按钮
        self.bid_page.invest(ID.success["money"])
        #标页面 - 投资成功弹出框,点击查看并激活按钮
        self.bid_page.click_activeButton_on_success_popup()
        #验证
        #个人页面 - 获取用户当前余额
        userMoney_afterInvest = UserPage(self.driver).get_user_leftMoney()
        #余额:投资前获取一下,投资后再获取一下,求差,如果等于投资金额,那正确
        assert ID.success["money"] ==int(float(userMoney_beforInvest)-float(userMoney_afterInvest))

    @data(*ID.wrong_format_money)
    def test_invest_0_failed_No100(self,data):
        logging.info("====投资用例:异常场景:投资金额为非100的整数,错误格式等====")
        # 标页面 - 获取投资前的个人余额
        userMoney_beforInvest = self.bid_page.get_user_money()
        # 标页面 - 输入投资金额,点击投资按钮
        self.bid_page.invest(data["money"])
        # 获取提示信息
        errMsg =self.bid_page.get_errorMsg_from_pageCenter()
        # 刷新
        self.driver.refresh()
        # 验证
        # 获取用户余额
        userMoney_afterInvest = self.bid_page.get_user_money()
        #断言
        assert errMsg == data["check"]
        assert userMoney_beforInvest == userMoney_afterInvest

    def test_invest_failed_no10(self):
        pass

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。