当前位置: 首页 > news >正文

惠城网站制作云主机 做网站

惠城网站制作,云主机 做网站,广告联盟排行,深圳网站建设 骏域网站建设tep是一款测试工具#xff0c;在pytest测试框架基础上集成了第三方包#xff0c;提供项目脚手架#xff0c;帮助以写Python代码方式#xff0c;快速实现自动化项目落地。 在tep项目中#xff0c;自动化测试用例都是放到tests目录下的#xff0c;每个.py文件相互独立在pytest测试框架基础上集成了第三方包提供项目脚手架帮助以写Python代码方式快速实现自动化项目落地。 在tep项目中自动化测试用例都是放到tests目录下的每个.py文件相互独立没有依赖1个文件即1条用例彼此分离。 虽然用例也能相互引用但是除非万不得已一般不建议这么做牵一发动全身后期维护困难。 用例的代码编写思路是从上往下的和pytest/unittest/script常规写法无异不会有学习成本一般也不会有问题。有成本有问题的可能是环境变量和fixtures因为tep做了封装提供了依赖注入的共享方式fixture又是pytest较难理解的知识点所以有必要通过本文来讲讲tep环境变量、fixtures、用例三者之间的关系帮助理解以便更灵活顺手的借助tep实现pytest自动化项目。 假如不用环境变量和fixtures 假如不用环境变量和fixtures是完全可以的比如在tests下新建脚本login_test.py from tep.client import requestdef test():response request(post,urlhttps://qa.com/api/users/login,headers{Content-Type: application/json},json{username: admin,password: 123456,})assert response.status_code 400 请求接口https://qa.com/api/users/login断言响应状态码小于400。问题来了url固定假如需要切换两个环境qa和release该怎么办 参数化 无论是做自动化测试还是性能测试都会接触到参数化这个词。它是指把代码中的固定数据硬编码定义成变量让每次运行时数据不一样固定数据变为动态数据。动态数据的来源是变量、数据库、外部文件等。动态数据的类型一般是常量的字符串也可以是函数比如JMeter的函数助手也可以是依赖注入比如pytest的fixture。 依赖注入的fixture “依赖注入是控制反转IoC Inversion of Control的一种技术形式”这句话出自维基百科我也不知道什么意思画个图简单表达下 意思是给client一个injectorclient不需要做什么就能用到service。 pytest的fixture实现了依赖注入允许我们在不修改测试代码的情况下引入fixture来额外添加一些东东。 对于url来说域名是需要做参数化的不同环境域名不同所以tep把它做成了fixture通过函数参数引入 from tep.client import request from tep.fixture import *def test(url): # 引入fixtureresponse request(post,urlurl(/api/users/login),headers{Content-Type: application/json},json{username: admin,password: 123456,})assert response.status_code 400 tep.fixture.url定义如下 pytest.fixture(scopesession) def url(env_vars):def domain_and_uri(uri):if not uri.startswith(/):uri / urireturn env_vars.domain urireturn domain_and_uri 如果一眼就看懂了恭喜你如果一眼就看懵了没关系。我会花功夫把它讲明白它很关键 把fixture当变量看 虽然从定义上看fixture是用def关键字定义的函数但是理解上把它看做变量就可以了。比如 import pytestpytest.fixture def name():return dongfanger 一般函数的用法是函数名加小括号通过name()才能得到dongfanger。fixture不一样以上定义可以理解为 name dongfanger 把dongfanger赋值给namefixture名 return值。通过变量name就得到dongfanger了。 既然是变量那么就能随便赋值str、function、class、object都行。比如在fixture内部定义个函数 import pytestpytest.fixture def who():def get_name():return dongfangerreturn get_name 理解为把函数名get_name赋值给fixture名变量 who get_name get_name是个函数名需要加小括号get_name()才能得到dongfanger。who也必须通过who()才能得到dongfanger。再看tep.fixture.url是不是清楚些了 pytest.fixture(scopesession) def url(env_vars):def domain_and_uri(uri):if not uri.startswith(/):uri / urireturn env_vars.domain urireturn domain_and_uri 理解为把函数名domain_and_uri赋值给fixture名变量 url domain_and_uri 使用时通过url(/api)得到域名和uri拼接后的结果。 第2行的def url(env_vars):也有一个参数env_vars接下来继续解释。 fixture参数是其他fixture fixture的参数只能是其他fixture。比如 import pytestpytest.fixture def chinese_name():return 东方erpytest.fixture def english_name(chinese_name):return dongfanger 调用english_namepytest会先执行参数里的其他fixture chinese_name然后执行自己english_name。 如果把tep.fixture.url拆成两步来看就很清晰了第一步 pytest.fixture(scopesession) def url(env_vars):func Nonereturn func 第二步 pytest.fixture(scopesession) def url(env_vars):func Nonedef domain_and_uri(uri):if not uri.startswith(/):uri / urireturn env_vars.domain urifunc domain_and_urireturn func 环境变量 tep.fixture.url的参数是另外一个fixture env_vars 环境变量它的定义如下 from tep.fixture import *pytest.fixture(scopesession) def env_vars(config):class Clazz(TepVars):env config[env]Variables define start# Environment and variablesmapping {qa: {domain: https://qa.com,},release: {domain: https://release.com,}# Add your environment and variables}# Define properties for auto displaydomain mapping[env][domain]Variables define endreturn Clazz() 只看中间注释Variables define start到Variables define end部分即可。url参数化的域名就在这里mapping字典建立了环境和变量之间的映射根据不同的环境key获取不同的变量value。 config fixture的作用是读取conf.yaml文件里面的配置。 参数化的方式很多JMeter提供了4种参数化方式tep的fixture env_vars借鉴了JMeter的用户自定义变量 env_vars.put()和env_vars.get()借鉴了JMeter BeanShell的vars.put()和vars.get()。 实例测试多个网址 讲到最后形成了思路通过实际的例子看看环境变量、fixtures、用例是怎么用起来的加深下印象。假如qa环境有2个网址学校端和机构端脚本都需要用到。 第一步修改env_vars编辑fixture_env_vars.py Variables define start# Environment and variablesmapping {qa: {domain: https://qa.com,domain_school: https://school.qa.com, # 新增domain_org: https://org.qa.com # 新增},release: {domain: https://release.com,domain_school: https://school.release.com # 新增domain_org: https://org.release.com # 新增}# Add your environment and variables}# Define properties for auto displaydomain mapping[env][domain]domain_school mapping[env][domain_school] # 新增domain_org mapping[env][domain_org] # 新增Variables define end 添加了6行代码定义了env_vars.domain_school和env_vars.domain_org。 第二步定义fixtures新建fixture_url.py pytest.fixture(scopesession) def url_school(env_vars):def domain_and_uri(uri):if not uri.startswith(/):uri / urireturn env_vars.domain_school urireturn domain_and_uripytest.fixture(scopesession) def url_org(env_vars):def domain_and_uri(uri):if not uri.startswith(/):uri / urireturn env_vars.domain_org urireturn domain_and_uri 参照tep.fixture.url修改env_vars.domain为env_vars.domain_school和env_vars.domain_org新增了2个fixture url_school和url_org。 更进一步也许会定义fixture login_school和login_org灵活选择。 小结 本文循序渐进的讲解了tep环境变量、fixtures和用例之间的关系重点对tep.fixture.url进行了解释只要理解了它整体关系就很清楚了。之所以要用fixture原因一是多人协作共享我们需要用别人写好的函数复用返回值有些同学习惯定义函数参数参数不变还好万一哪天改了别人引用的用例会全部报错fixture很好的限制了这一点它默认是不能传参的虽然可以通过定义内部函数来实现传参但是并不推荐这么做宁愿增加冗余代码定义多个fixture也比代码耦合度高好一些。原因二是import的问题pytest会自动查找conftest.py里的fixturetep会进一步自动查找fixtures下的fixture导入到conftest.py不需要import就能使用减少了import代码避免了可能会出现的循环导入问题。 正在学习测试的小伙伴可以通过点击下面的小卡片
http://www.w-s-a.com/news/639375/

相关文章:

  • 万网提供的网站建设服务的具体项目祥云平台网站建设
  • ftp网站怎么看后台的代码网站 制作软件
  • 网站开发软件教程网站tag 怎么实现
  • 中国建设监理协会化工监理协会网站彩票站自己做网站吗
  • 170个可带链接锚文本外链的网站论坛微信上如何创建小程序
  • 用js来做网站亳州建设局网站
  • 做网站的公司利润多少呢纺织厂网站模板
  • 网页设计构建的基本流程宜宾seo网站建设
  • 西安网站开发公司价格保定徐水网站建设
  • 学做川菜下什么网站软件著作权和专利的区别
  • 百度网站标题东莞外包公司有哪些
  • 织梦增加网站英文名称网页界面设计特点
  • 企业如何进行网站建设棋牌代理平台
  • 韩国做美食网站有哪些seo优化在线诊断
  • 网站建设规划模板做擦边网站
  • 做网站台式还是笔记本网上下载的免费网站模板怎么用
  • 高校网站群管理系统凡科建站是永久的吗
  • 深圳网站建设服务电话网站通栏设计素材
  • 网站里面的视频功能怎么做网站名注册
  • 网站游戏下载厦门php网站建设
  • 沈阳关键词网站排名一台服务器做两个网站吗
  • 哪个行业该做网站但是没有做dom手表官方网站
  • 网站建设费 大创wordpress中函数get
  • 怎样建设个自己的网站首页有没有专门教做扯面的网站
  • 网站后台怎么添加模板教育类网站开发公司
  • 网站的外链是什么php创建一个网站
  • 语文建设 官方网站网络工程可以从事什么工作
  • 无锡便宜做网站如何下载网站模板
  • 南宁高端网站网络小说网站推广策划方案
  • 苏州网站制作方法建设银行 网站