pytest-一波分离及配置实践记录

今天尝试将测试数据放入yaml文件,url地址放入配置文件,虽然增加了一些文件,但让整体的逻辑结构更加清晰了,在这里记录一下这个实施过程以及值得注意的地方。

整体配置流程如图所示:


配置流程.png

文件结构如下:


目录结构

config

配置文件所在的文件夹,在config.yaml可以标明一些常规配置,这里配置了url地址,用于后续测试用例应用。

host:
  test: https://test.com/

conftest.py

配置一些fixture,这里配置了在会话开始之初读取上方的config.yaml

import pytest
import os
import yaml

@pytest.fixture(scope="session")
def url(request):
    config_path=os.path.join(request.config.rootdir,'config','config.yaml')
    with open(config_path) as f:
        data=yaml.safe_load(f)
    return data
注意点

request.config.rootdir可以直接返回项目的根目录,通过os.path.join则可以获得config.yaml的地址。

data

此文件夹下主要存储测试数据yaml文件。

- case: 测试用例一
  http:
    method: POST
    path: /user
    json:
      nickname: "11"
  expected:
    response:
      statuscode: 200
      name: "11"

pytest.ini

pytest主配置文件,可以规定pytest执行时候的一些默认行为,在这里主要是标明了当后续执行需要输出每个用例的ids,为保证中文正常输出,在pytest.ini文件中增加如下配置:

[pytest]
disable_test_id_escaping_and_forfeit_all_rights_to_community_support = True

utils

commlib.py文件所在文件夹,主要是用于读取存储在data下方yaml文件的测试数据。

import os
import yaml
def get_test_data(data_path):
    case=[]
    http=[]
    expected=[]
    with open(data_path,mode='r',encoding='utf-8') as f:
        data=yaml.safe_load(f)
        data=data['test']#剥离出test
        for td in data:
            case.append(td.get('case',''))#剥离出case
            http.append(td.get('http',{}))#剥离出http
            expected.append(td.get('expected', {}))#剥离出expected
    parameters=zip(case,http,expected)#将case、http、expected合并成一个tuple
    list_params=list(parameters)##zip变成一个list
    return case,list_params

tests

包括test_case.py,测试用例执行的文件。

import requests
import pytest
import os
from root.utils import commlib


path=os.path.abspath(os.path.pardir)
datapath=os.path.join(path,'data','test_case_data.yaml')
cases,list=commlib.get_test_data(datapath)


class Test_class():
    @pytest.mark.parametrize("case,http,expected",list,ids=cases)
    def test_one(self,url,case,http,expected):
        now_url=url["host"]["test"]+http["path"]
        json=http["json"]
        res=requests.post(url=now_url,json=json)
        response=res.json()
        assert res.status_code==expected["response"]["statuscode"]
        assert response["name"]==expected["response"]["name"]
注意点
  1. 文件引用。
    test_case.py文件中,需要引用在utils文件夹下方的commlib.py文件,如果不做任何特殊操作,直接引用,程序会报错,提示根目录root找不到。
    为了解决这个问题,需要在各个涉及到引用的文件夹中建立__init__.py文件,空文件即可。这个文件可以标明当前的文件夹是一个包,内部的各个模块即各个文件可以被引用。
  2. 获取上级目录的方法。
    os.path.pardir可以获取到上级目录,但是形式是..,为获取测试数据的yaml文件地址,需要获取到它的绝对路径:
os.path.abspah(os.path.pardir)

总结

yaml中写入测试数据,针对每一个测试用例,可以标明不同的paramsexpected等测试数据结构,而在测试用例文件中,只需要一个测试函数即可执行全部的测试用例,逻辑清晰且有效的降低了测试函数的编写工作量,同时将测试数据与测试用例操作相分离,如果后续有更改,也会更加方便。

自我记录,有错误欢迎指正~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容