summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-06-20 03:39:43 +0000
committerCoprDistGit <infra@openeuler.org>2023-06-20 03:39:43 +0000
commita32dc820d1daad04d605f6eb75e086aa8171fc81 (patch)
treef2e735c0d0e7a36a1c552ee9d08111733885f1cb
parent2a26d1a15287c5571c5bc43440a8326b72ca3d63 (diff)
automatic import of python-swg2pytopeneuler20.03
-rw-r--r--.gitignore1
-rw-r--r--python-swg2pyt.spec696
-rw-r--r--sources1
3 files changed, 698 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..1c32ee3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/swg2pyt-0.2.9.tar.gz
diff --git a/python-swg2pyt.spec b/python-swg2pyt.spec
new file mode 100644
index 0000000..4f0b0f4
--- /dev/null
+++ b/python-swg2pyt.spec
@@ -0,0 +1,696 @@
+%global _empty_manifest_terminate_build 0
+Name: python-swg2pyt
+Version: 0.2.9
+Release: 1
+Summary: A helper generate swagger_client code to pytest format
+License: Freeware
+URL: https://pypi.org/project/swg2pyt/
+Source0: https://mirrors.aliyun.com/pypi/web/packages/cf/02/d7aabced5ce49fb3d44086c09d95e38f77cb6488029c90a6b6d040b02975/swg2pyt-0.2.9.tar.gz
+BuildArch: noarch
+
+
+%description
+# swg2pyt
+### 代码准备
+* 新建文件夹
+
+* 安装模块 python -m pip install swg2pyt
+
+* 生成swagger_client(路径分隔符有需要自行更正)
+ ```
+ java -jar .\swagger-codegen-cli.jar generate -i .\practice.json -l python -o .\practice_interface
+ ```
+ 记住这个 practice_interface 文件夹
+
+* 新建测试用例文件夹 practice_case
+
+ 并在 practice_case 下,创建如下结构的文件夹和xmind文件:
+ ```
+ xxx/xxx_data/xxx.xmind
+ ```
+ example:
+ ```
+ practice/practice_data/practice.xmind
+ ```
+
+* 假设现在xmind中已有有效用例
+ ```
+ from swg2pyt.ClassGenerator import ClassGenerator
+
+ cg=ClassGenerator("practice_interface","practice_case")
+ cg.generate()
+ ```
+ 将生成如下:\
+ practice_case/auto/\
+ ├──test_xxx.py\
+ ├──marks\
+ 同时会在xmind所在位置生成同名的 case.json ,建议只上传json至git
+
+### xmind基本结构
+
+函数名->请求类型和地址->TestCase->具体用例
+
+其中:
+- 函数名\
+生成的swaggerapi中的真正函数名最短的那个,如practice_interface\\swagger_client\\api\
+文件夹下practice_api.py中,定义有如下函数:
+ ```
+ def practice_using_post():
+ 和
+ def practice_using_post_with_http_info():
+ ```
+ 则函数名为 practice_using_post
+
+- 请求类型和地址\
+可于文档或代码中查找到:此处为\
+ POST /return_as_is
+
+- TestCase\
+用例汇聚节点
+
+### 用例结构
+* 用例的最丰富组成结构为
+ ```
+ |-请求体
+ |-其他入参
+ |-描述
+ 用例名 |-预置条件
+ |-断言
+ |-mark
+ |-order
+ ```
+* 请求体:最常见的情况是大部分接口请求参数(GET请求的query param,POST请求的body)被打包为param,且位于函数入参首位,这部分参数放入请求体
+
+* 其他入参: 除请求体外直接出现在函数签名中的接口其他请求参数(可能用于header,url部分),这部分参数放入其他入参
+
+* 预置条件:用于处理除自身外其他结构的数据,以及决定大部分测试框架行为
+
+* 描述:功能无关的描述信息,生成test_xxx.py时,用作函数注释
+
+* 断言:决定测试用例是否通过,以及重试次数
+
+* mark用于标记用例,功能由pytest实现,只是可以写在这
+
+* order用于改变用例执行顺序,但优先级低于预置条件中的precase和fromcase函数
+
+### 用例基本执行流程
+* 开始
+* 由xmind 生成json(从这一步开始数据将从json中读取)
+* 生成test_xxx.py(在测试用例文件夹下auto文件夹)
+* pytest读取上一步生成的py,按mark collect用例
+* 在pytest 完成collect用例后,按order重新排序用例
+* (pytest执行用例期间)执行前置请求->预处理用例->发起请求->按设定次数重试
+* pytest收尾
+* 结束
+
+### 预置条件主要作用
+* 决定用例使用哪些fixture
+* 改变请求体或其他入参,实现大部分动态数据功能,明面上或间接影响用例行为(主要是执行顺序),实现位于 Pretreator.py
+
+### 断言主要作用
+* 对用例返回的header,body和status做断言,实现位于 Asserter.py
+* 当出现断言失败时,决定重试次数
+
+### order主要作用
+* 在用例中添加order并输入一个整数,可以变更用例执行顺序。默认的用例order为0(可以不写)。如果需要测试用例提前执行,填一个正数,如果需要测试用例延缓执行,则填一个负数,最终测试用例会按order从大到小的顺序执行,order相同的用例执行顺序暂不清楚,默认值的用例执行顺序可以参考它们在 test_xxx.py 中从上到下出现的顺序
+
+### mark主要作用
+* mark没有特别功能,pytest做什么,mark就做什么
+
+### 框架主要作用
+* 全自动读取测试用例,生成测试数据,执行
+* 分离代码和测试数据
+* 生成pytest可以识别的标准格式的test_*.py,使测试用例更易写易读易管理
+
+### 预处理如何使用及常用函数介绍
+
+* 预处理为一个字典,其中\
+ 顶级key为预处理范围,如请求体、其他入参、或断言\
+ 在顶级key的value(也是一个字典)中,次级key按xxx.yyy.zzz的格式选择将要处理的对象,次级value选择处理函数,例如
+ ```
+ 请求体
+ ——————————————
+ {
+ "xxx":{
+ "yyy":{
+ "zzz":"Hello world"
+ }
+ }
+ }
+
+ 预置条件
+ ——————————————
+ {
+ "请求体":{
+ "xxx.yyy.zzz":{
+ "replace":[
+ "world","pytest"
+ ]
+ }
+ }
+ }
+ ```
+* 预置条件将用replace函数处理请求体中的xxx.yyy.zzz的值\
+* 其中replace预处理函数接受一个或两个入参(放在列表中)\
+* 当仅有一个入参时,整个xxx.yyy.zzz会被这个入参完全替换\
+* 当有两个入参时,则效果参考python标准库函数的replace\
+* 这个预置条件顺利执行后,会将请求体的xxx.yyy.zzz的值替换为Hello pytest\
+* 预处理函数的入参,即列表中的项还可以是其他预处理函数(字典),以实现更复杂的预处理\
+* 常用预处理函数功能介绍(具体入参见代码):
+
+ - len 获取某个对象的长度,当对象为:
+ - 字符串:获取字符串长度
+ - 列表:获取列表个数
+ - 字典:获取字典key的个数
+ - toint:把字符串转换为整数
+ - tofloat:把字符串转换为浮点数
+ - tostr:把任何python支持的对象转换为str
+ - range:返回一个标准range的列表
+ - base64:返回一个字符串或文件内容的base64encode结果
+ - tolist:将入参组合成一个列表并返回
+ - todict:以入参奇数位为key,偶数位为value,返回一个字典
+ - fixture:对于有返回值的fixture,从fixture处取值
+ - replace:替换目标的全部或部分文本
+ - precase:在执行当前用例之前,强行先执行列出的用例
+ - fromcase:从目标用例处获取用例执行完成后的各来源值
+ - timestamp:返回一个秒级(int)或毫秒级(float)时间戳
+ - parametrize:使用了这个预处理函数的入参,入参列表有几个,该用例就会执行几次(与pytest无关),如果一个用例中有多个该预处理函数,则多个预处理函数并行,最终执行次数取决于入参列表最长的那个,不够长度的,取末尾值
+
+### 断言如何使用
+* 与预置条件类似,也是用keypath决定取值,但headers只需要一次key,status当前只返回status code\
+ ```
+ response
+ ————————————————
+ status_code:200
+ headers:{"Connection:keep-alive"}
+ body:
+ {
+ "xxx":{
+ "yyy":{
+ "zzz":"Success"
+ }
+ }
+ }
+
+ 断言
+ ————————————————
+ {
+ "headers":{
+ "Connection":{
+ "eq":"keep-alive"
+ }
+ },
+ "body":{
+ "xxx.yyy.zzz":{
+ "eq":"Success"`
+ }
+ },
+ "status":{"eq":200},
+ "retry":3
+ }
+ ```
+* 可以使用的断言函数在 Asserter.py 中查看\
+* 断言可以有多个,但整体用例断言结果为所有小断言的与值\
+* 重试(retry)会在任意一个小断言失败时触发,效果为重新发起请求及再次尝试断言,断言失败继续重试,成功则通过用例。\
+* 重试次数默认为1(不重试)
+
+### 给框架加功能
+* 实现简单的预处理和断言拓展,可以分别在 Pretreator.py 和 Asserer.py 中添加函数并“注册”到prtdict或astdict中,复杂的拓展可以配合修改 ClassGenerator.py , Executor.py , CaseCollector.py 实现
+* 添加更多fixture,可以在 conftest.py 中添加函数并使用Pytest.fixture装饰器
+* 想要改变pytest的行为,可以在 conftest.py 中添加“钩子函数”,或在预处理/断言代码中调用pytest函数
+
+
+%package -n python3-swg2pyt
+Summary: A helper generate swagger_client code to pytest format
+Provides: python-swg2pyt
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-swg2pyt
+# swg2pyt
+### 代码准备
+* 新建文件夹
+
+* 安装模块 python -m pip install swg2pyt
+
+* 生成swagger_client(路径分隔符有需要自行更正)
+ ```
+ java -jar .\swagger-codegen-cli.jar generate -i .\practice.json -l python -o .\practice_interface
+ ```
+ 记住这个 practice_interface 文件夹
+
+* 新建测试用例文件夹 practice_case
+
+ 并在 practice_case 下,创建如下结构的文件夹和xmind文件:
+ ```
+ xxx/xxx_data/xxx.xmind
+ ```
+ example:
+ ```
+ practice/practice_data/practice.xmind
+ ```
+
+* 假设现在xmind中已有有效用例
+ ```
+ from swg2pyt.ClassGenerator import ClassGenerator
+
+ cg=ClassGenerator("practice_interface","practice_case")
+ cg.generate()
+ ```
+ 将生成如下:\
+ practice_case/auto/\
+ ├──test_xxx.py\
+ ├──marks\
+ 同时会在xmind所在位置生成同名的 case.json ,建议只上传json至git
+
+### xmind基本结构
+
+函数名->请求类型和地址->TestCase->具体用例
+
+其中:
+- 函数名\
+生成的swaggerapi中的真正函数名最短的那个,如practice_interface\\swagger_client\\api\
+文件夹下practice_api.py中,定义有如下函数:
+ ```
+ def practice_using_post():
+ 和
+ def practice_using_post_with_http_info():
+ ```
+ 则函数名为 practice_using_post
+
+- 请求类型和地址\
+可于文档或代码中查找到:此处为\
+ POST /return_as_is
+
+- TestCase\
+用例汇聚节点
+
+### 用例结构
+* 用例的最丰富组成结构为
+ ```
+ |-请求体
+ |-其他入参
+ |-描述
+ 用例名 |-预置条件
+ |-断言
+ |-mark
+ |-order
+ ```
+* 请求体:最常见的情况是大部分接口请求参数(GET请求的query param,POST请求的body)被打包为param,且位于函数入参首位,这部分参数放入请求体
+
+* 其他入参: 除请求体外直接出现在函数签名中的接口其他请求参数(可能用于header,url部分),这部分参数放入其他入参
+
+* 预置条件:用于处理除自身外其他结构的数据,以及决定大部分测试框架行为
+
+* 描述:功能无关的描述信息,生成test_xxx.py时,用作函数注释
+
+* 断言:决定测试用例是否通过,以及重试次数
+
+* mark用于标记用例,功能由pytest实现,只是可以写在这
+
+* order用于改变用例执行顺序,但优先级低于预置条件中的precase和fromcase函数
+
+### 用例基本执行流程
+* 开始
+* 由xmind 生成json(从这一步开始数据将从json中读取)
+* 生成test_xxx.py(在测试用例文件夹下auto文件夹)
+* pytest读取上一步生成的py,按mark collect用例
+* 在pytest 完成collect用例后,按order重新排序用例
+* (pytest执行用例期间)执行前置请求->预处理用例->发起请求->按设定次数重试
+* pytest收尾
+* 结束
+
+### 预置条件主要作用
+* 决定用例使用哪些fixture
+* 改变请求体或其他入参,实现大部分动态数据功能,明面上或间接影响用例行为(主要是执行顺序),实现位于 Pretreator.py
+
+### 断言主要作用
+* 对用例返回的header,body和status做断言,实现位于 Asserter.py
+* 当出现断言失败时,决定重试次数
+
+### order主要作用
+* 在用例中添加order并输入一个整数,可以变更用例执行顺序。默认的用例order为0(可以不写)。如果需要测试用例提前执行,填一个正数,如果需要测试用例延缓执行,则填一个负数,最终测试用例会按order从大到小的顺序执行,order相同的用例执行顺序暂不清楚,默认值的用例执行顺序可以参考它们在 test_xxx.py 中从上到下出现的顺序
+
+### mark主要作用
+* mark没有特别功能,pytest做什么,mark就做什么
+
+### 框架主要作用
+* 全自动读取测试用例,生成测试数据,执行
+* 分离代码和测试数据
+* 生成pytest可以识别的标准格式的test_*.py,使测试用例更易写易读易管理
+
+### 预处理如何使用及常用函数介绍
+
+* 预处理为一个字典,其中\
+ 顶级key为预处理范围,如请求体、其他入参、或断言\
+ 在顶级key的value(也是一个字典)中,次级key按xxx.yyy.zzz的格式选择将要处理的对象,次级value选择处理函数,例如
+ ```
+ 请求体
+ ——————————————
+ {
+ "xxx":{
+ "yyy":{
+ "zzz":"Hello world"
+ }
+ }
+ }
+
+ 预置条件
+ ——————————————
+ {
+ "请求体":{
+ "xxx.yyy.zzz":{
+ "replace":[
+ "world","pytest"
+ ]
+ }
+ }
+ }
+ ```
+* 预置条件将用replace函数处理请求体中的xxx.yyy.zzz的值\
+* 其中replace预处理函数接受一个或两个入参(放在列表中)\
+* 当仅有一个入参时,整个xxx.yyy.zzz会被这个入参完全替换\
+* 当有两个入参时,则效果参考python标准库函数的replace\
+* 这个预置条件顺利执行后,会将请求体的xxx.yyy.zzz的值替换为Hello pytest\
+* 预处理函数的入参,即列表中的项还可以是其他预处理函数(字典),以实现更复杂的预处理\
+* 常用预处理函数功能介绍(具体入参见代码):
+
+ - len 获取某个对象的长度,当对象为:
+ - 字符串:获取字符串长度
+ - 列表:获取列表个数
+ - 字典:获取字典key的个数
+ - toint:把字符串转换为整数
+ - tofloat:把字符串转换为浮点数
+ - tostr:把任何python支持的对象转换为str
+ - range:返回一个标准range的列表
+ - base64:返回一个字符串或文件内容的base64encode结果
+ - tolist:将入参组合成一个列表并返回
+ - todict:以入参奇数位为key,偶数位为value,返回一个字典
+ - fixture:对于有返回值的fixture,从fixture处取值
+ - replace:替换目标的全部或部分文本
+ - precase:在执行当前用例之前,强行先执行列出的用例
+ - fromcase:从目标用例处获取用例执行完成后的各来源值
+ - timestamp:返回一个秒级(int)或毫秒级(float)时间戳
+ - parametrize:使用了这个预处理函数的入参,入参列表有几个,该用例就会执行几次(与pytest无关),如果一个用例中有多个该预处理函数,则多个预处理函数并行,最终执行次数取决于入参列表最长的那个,不够长度的,取末尾值
+
+### 断言如何使用
+* 与预置条件类似,也是用keypath决定取值,但headers只需要一次key,status当前只返回status code\
+ ```
+ response
+ ————————————————
+ status_code:200
+ headers:{"Connection:keep-alive"}
+ body:
+ {
+ "xxx":{
+ "yyy":{
+ "zzz":"Success"
+ }
+ }
+ }
+
+ 断言
+ ————————————————
+ {
+ "headers":{
+ "Connection":{
+ "eq":"keep-alive"
+ }
+ },
+ "body":{
+ "xxx.yyy.zzz":{
+ "eq":"Success"`
+ }
+ },
+ "status":{"eq":200},
+ "retry":3
+ }
+ ```
+* 可以使用的断言函数在 Asserter.py 中查看\
+* 断言可以有多个,但整体用例断言结果为所有小断言的与值\
+* 重试(retry)会在任意一个小断言失败时触发,效果为重新发起请求及再次尝试断言,断言失败继续重试,成功则通过用例。\
+* 重试次数默认为1(不重试)
+
+### 给框架加功能
+* 实现简单的预处理和断言拓展,可以分别在 Pretreator.py 和 Asserer.py 中添加函数并“注册”到prtdict或astdict中,复杂的拓展可以配合修改 ClassGenerator.py , Executor.py , CaseCollector.py 实现
+* 添加更多fixture,可以在 conftest.py 中添加函数并使用Pytest.fixture装饰器
+* 想要改变pytest的行为,可以在 conftest.py 中添加“钩子函数”,或在预处理/断言代码中调用pytest函数
+
+
+%package help
+Summary: Development documents and examples for swg2pyt
+Provides: python3-swg2pyt-doc
+%description help
+# swg2pyt
+### 代码准备
+* 新建文件夹
+
+* 安装模块 python -m pip install swg2pyt
+
+* 生成swagger_client(路径分隔符有需要自行更正)
+ ```
+ java -jar .\swagger-codegen-cli.jar generate -i .\practice.json -l python -o .\practice_interface
+ ```
+ 记住这个 practice_interface 文件夹
+
+* 新建测试用例文件夹 practice_case
+
+ 并在 practice_case 下,创建如下结构的文件夹和xmind文件:
+ ```
+ xxx/xxx_data/xxx.xmind
+ ```
+ example:
+ ```
+ practice/practice_data/practice.xmind
+ ```
+
+* 假设现在xmind中已有有效用例
+ ```
+ from swg2pyt.ClassGenerator import ClassGenerator
+
+ cg=ClassGenerator("practice_interface","practice_case")
+ cg.generate()
+ ```
+ 将生成如下:\
+ practice_case/auto/\
+ ├──test_xxx.py\
+ ├──marks\
+ 同时会在xmind所在位置生成同名的 case.json ,建议只上传json至git
+
+### xmind基本结构
+
+函数名->请求类型和地址->TestCase->具体用例
+
+其中:
+- 函数名\
+生成的swaggerapi中的真正函数名最短的那个,如practice_interface\\swagger_client\\api\
+文件夹下practice_api.py中,定义有如下函数:
+ ```
+ def practice_using_post():
+ 和
+ def practice_using_post_with_http_info():
+ ```
+ 则函数名为 practice_using_post
+
+- 请求类型和地址\
+可于文档或代码中查找到:此处为\
+ POST /return_as_is
+
+- TestCase\
+用例汇聚节点
+
+### 用例结构
+* 用例的最丰富组成结构为
+ ```
+ |-请求体
+ |-其他入参
+ |-描述
+ 用例名 |-预置条件
+ |-断言
+ |-mark
+ |-order
+ ```
+* 请求体:最常见的情况是大部分接口请求参数(GET请求的query param,POST请求的body)被打包为param,且位于函数入参首位,这部分参数放入请求体
+
+* 其他入参: 除请求体外直接出现在函数签名中的接口其他请求参数(可能用于header,url部分),这部分参数放入其他入参
+
+* 预置条件:用于处理除自身外其他结构的数据,以及决定大部分测试框架行为
+
+* 描述:功能无关的描述信息,生成test_xxx.py时,用作函数注释
+
+* 断言:决定测试用例是否通过,以及重试次数
+
+* mark用于标记用例,功能由pytest实现,只是可以写在这
+
+* order用于改变用例执行顺序,但优先级低于预置条件中的precase和fromcase函数
+
+### 用例基本执行流程
+* 开始
+* 由xmind 生成json(从这一步开始数据将从json中读取)
+* 生成test_xxx.py(在测试用例文件夹下auto文件夹)
+* pytest读取上一步生成的py,按mark collect用例
+* 在pytest 完成collect用例后,按order重新排序用例
+* (pytest执行用例期间)执行前置请求->预处理用例->发起请求->按设定次数重试
+* pytest收尾
+* 结束
+
+### 预置条件主要作用
+* 决定用例使用哪些fixture
+* 改变请求体或其他入参,实现大部分动态数据功能,明面上或间接影响用例行为(主要是执行顺序),实现位于 Pretreator.py
+
+### 断言主要作用
+* 对用例返回的header,body和status做断言,实现位于 Asserter.py
+* 当出现断言失败时,决定重试次数
+
+### order主要作用
+* 在用例中添加order并输入一个整数,可以变更用例执行顺序。默认的用例order为0(可以不写)。如果需要测试用例提前执行,填一个正数,如果需要测试用例延缓执行,则填一个负数,最终测试用例会按order从大到小的顺序执行,order相同的用例执行顺序暂不清楚,默认值的用例执行顺序可以参考它们在 test_xxx.py 中从上到下出现的顺序
+
+### mark主要作用
+* mark没有特别功能,pytest做什么,mark就做什么
+
+### 框架主要作用
+* 全自动读取测试用例,生成测试数据,执行
+* 分离代码和测试数据
+* 生成pytest可以识别的标准格式的test_*.py,使测试用例更易写易读易管理
+
+### 预处理如何使用及常用函数介绍
+
+* 预处理为一个字典,其中\
+ 顶级key为预处理范围,如请求体、其他入参、或断言\
+ 在顶级key的value(也是一个字典)中,次级key按xxx.yyy.zzz的格式选择将要处理的对象,次级value选择处理函数,例如
+ ```
+ 请求体
+ ——————————————
+ {
+ "xxx":{
+ "yyy":{
+ "zzz":"Hello world"
+ }
+ }
+ }
+
+ 预置条件
+ ——————————————
+ {
+ "请求体":{
+ "xxx.yyy.zzz":{
+ "replace":[
+ "world","pytest"
+ ]
+ }
+ }
+ }
+ ```
+* 预置条件将用replace函数处理请求体中的xxx.yyy.zzz的值\
+* 其中replace预处理函数接受一个或两个入参(放在列表中)\
+* 当仅有一个入参时,整个xxx.yyy.zzz会被这个入参完全替换\
+* 当有两个入参时,则效果参考python标准库函数的replace\
+* 这个预置条件顺利执行后,会将请求体的xxx.yyy.zzz的值替换为Hello pytest\
+* 预处理函数的入参,即列表中的项还可以是其他预处理函数(字典),以实现更复杂的预处理\
+* 常用预处理函数功能介绍(具体入参见代码):
+
+ - len 获取某个对象的长度,当对象为:
+ - 字符串:获取字符串长度
+ - 列表:获取列表个数
+ - 字典:获取字典key的个数
+ - toint:把字符串转换为整数
+ - tofloat:把字符串转换为浮点数
+ - tostr:把任何python支持的对象转换为str
+ - range:返回一个标准range的列表
+ - base64:返回一个字符串或文件内容的base64encode结果
+ - tolist:将入参组合成一个列表并返回
+ - todict:以入参奇数位为key,偶数位为value,返回一个字典
+ - fixture:对于有返回值的fixture,从fixture处取值
+ - replace:替换目标的全部或部分文本
+ - precase:在执行当前用例之前,强行先执行列出的用例
+ - fromcase:从目标用例处获取用例执行完成后的各来源值
+ - timestamp:返回一个秒级(int)或毫秒级(float)时间戳
+ - parametrize:使用了这个预处理函数的入参,入参列表有几个,该用例就会执行几次(与pytest无关),如果一个用例中有多个该预处理函数,则多个预处理函数并行,最终执行次数取决于入参列表最长的那个,不够长度的,取末尾值
+
+### 断言如何使用
+* 与预置条件类似,也是用keypath决定取值,但headers只需要一次key,status当前只返回status code\
+ ```
+ response
+ ————————————————
+ status_code:200
+ headers:{"Connection:keep-alive"}
+ body:
+ {
+ "xxx":{
+ "yyy":{
+ "zzz":"Success"
+ }
+ }
+ }
+
+ 断言
+ ————————————————
+ {
+ "headers":{
+ "Connection":{
+ "eq":"keep-alive"
+ }
+ },
+ "body":{
+ "xxx.yyy.zzz":{
+ "eq":"Success"`
+ }
+ },
+ "status":{"eq":200},
+ "retry":3
+ }
+ ```
+* 可以使用的断言函数在 Asserter.py 中查看\
+* 断言可以有多个,但整体用例断言结果为所有小断言的与值\
+* 重试(retry)会在任意一个小断言失败时触发,效果为重新发起请求及再次尝试断言,断言失败继续重试,成功则通过用例。\
+* 重试次数默认为1(不重试)
+
+### 给框架加功能
+* 实现简单的预处理和断言拓展,可以分别在 Pretreator.py 和 Asserer.py 中添加函数并“注册”到prtdict或astdict中,复杂的拓展可以配合修改 ClassGenerator.py , Executor.py , CaseCollector.py 实现
+* 添加更多fixture,可以在 conftest.py 中添加函数并使用Pytest.fixture装饰器
+* 想要改变pytest的行为,可以在 conftest.py 中添加“钩子函数”,或在预处理/断言代码中调用pytest函数
+
+
+%prep
+%autosetup -n swg2pyt-0.2.9
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-swg2pyt -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Tue Jun 20 2023 Python_Bot <Python_Bot@openeuler.org> - 0.2.9-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..4bda068
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+3811fced448a66e0f0ce0db74057c950 swg2pyt-0.2.9.tar.gz