python 自动化测试结构

目录结构

|
base
	-base_page.py
|
data
	-test_api.yaml
|
po
	-baidu_page.py
|
testcase
	-test_baidu.py
	-test_api.py
	-conftest.py
|
utils
	-yaml.util.py
main.pu
pytest.ini

1, base基础层

base文件夹base_page.py

from selenium import webdriver
# 第一次 base基础层
class BasePage:
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(2)
        self.driver.get('https://www.baidu.com/')
    def find_obj(self, *args):
        return self.driver.find_element(*args)

2,第二层 po页面层 继承BasePage基础层

po文件夹baidu_page.py

import time

from selenium.webdriver.common.by import By

from base.base_page import BasePage

# 第二层 po页面层
# 继承BasePage基础层
class BaiduPage(BasePage):
    # 页面元素定位
    baidu_text_loc = (By.ID,'kw')
    baidu_submit_loc = (By.ID,'su')
    # 页面元素对象
    def get_text_obj(self):
        return self.find_obj(*BaiduPage.baidu_text_loc)
    def get_submit_obj(self):
        return self.find_obj(*BaiduPage.baidu_submit_loc)
    # 页面动作
    def serch(self):
        self.get_text_obj().send_keys('python')
        self.get_submit_obj().click()
        time.sleep(14)

3,测试用例

testcase文件夹test_baidu.py

from po.baidu_page import BaiduPage


class TestBaidu:
    def test01_baidu_serch(self):
        BaiduPage().serch()


test_api.py

import os
import pytest
import requests

from utils.yaml_util import YamlUtil


class TestApi:
    @pytest.mark.parametrize('args', YamlUtil(os.getcwd() + '/data/test_api.yaml').read_yaml())
    def test_api(self, args):
        url = args['request']['url']
        params = args['request']['params']
        res = requests.get(url, params=params)
        print(res.text)

pytest.ini

[pytest]
addopts = -vs --alluredir ./report
testpaths = ./testcase
python_files = test_*.py
python_classes = Test*
python_functions = test
markers =
        smoke:冒烟用例
        usermanage:用户管理模块

conftest.py

import pytest

@pytest.fixture(scope='function',params=['123'])
def login(request):
    print('前置')
    yield
    print('后置')

test_api.yaml

-
  name: 获取token鉴权码接口
  request:
    url: https://api.weixin.qq.com/cgi-bin/token
    method: get
    headers:
      Content-Type: application/json
    params:
      grant_type: client_credential
      appid: wx6b11b3efd1cdc290
      secret: 106a9c6157c4db5f6029918738f9529d
    validate:
      - eq: {expires_in: 7200}

你可能感兴趣的:(python,开发语言,前端)