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

购物网站制作教程白云区最新新闻

购物网站制作教程,白云区最新新闻,网页图片显示不出来,红河蒙自网站开发最近在这整理知识#xff0c;发现在pytest的知识文档缺少系统性#xff0c;这里整理一下#xff0c;方便后续回忆。 在python中#xff0c;大家比较熟悉的两个框架是unittest和pytest#xff1a; Unittest是Python标准库中自带的单元测试框架#xff0c;Unittest有时候…最近在这整理知识发现在pytest的知识文档缺少系统性这里整理一下方便后续回忆。 在python中大家比较熟悉的两个框架是unittest和pytest Unittest是Python标准库中自带的单元测试框架Unittest有时候也被称为PyUnit就像JUnit是Java语言的标准单元测试框架一样Unittest则是Python语言的标准单元测试框架。 Pytest是Python的另一个第三方单元测试库。它的目的是让单元测试变得更容易并且也能扩展到支持应用层面复杂的功能测试。 两者之间的区别如下 这里试用的pytest框架加上request来实现接口自动化的测试整个框架考虑到使用数据驱动的方式将数据维护在Excel文档中。 1、下载安装allure 下载地址 https://github.com/allure-framework/allure2/releases https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/ 选择需要的版本下载这里我下载的是2.13.2版本 下载好后解压到你需要存放的路目录并配置环境变量 检查是否配置成功执行cmd输入命令 allure出现如下图则表示安装成功 2、下载安装python 下载地址https://www.python.org/ 下载好后安装并配置环境变量具体流程可以网络查找 3、python安装依赖包 cmd命令执行也可以通过项目中的requirements.txt来安装安装步骤后面再说 pip3 install allure-pytest pip3 install pytest pip3 install pytest_html pip3 install request4、下载并安装pycharm工具 查看网络教程 5、在pycharm新建项目及编码 项目目录如图 base存放一些最底层的方法封装协议请求发送等。 common:存放一些公共方法。 config:存放配置文件。 testData:存放测试数据。 log:存放日志。 report:存放报告。 testCase:存放用例。 utils:存放公共类。 readme:用于说明文档。 requirements.txt: 用于记录所有依赖包极其版本号便于环境部署可以通过pip命令自动生成和安装 这里采用数据驱动的方式数据通过读取excel文件来执行测试所以这里需要封装读取excel的方法使用xlrd来操作读取 # operationExcel.py import jsonfrom common.contentsManage import filePath import xlrd, xlwt class OperationExcel:# 获取shell表def getSheet(self, index0):book xlrd.open_workbook(filePath())return book.sheet_by_index(index) #根据索引获取到sheet表# 以列表形式读取出所有数据def getExcelData(self, index0):data []sheet self.getSheet(indexindex)title sheet.row_values(0) # (0)获取第一行也就是表头for row in range(1, sheet.nrows): # 从第二行开始获取row_value sheet.row_values(row)data.append(dict(zip(title, row_value))) # 将读取出第一条用例作为一个字典存放近列表return data# 对excel表头进行全局变量定义 class ExcelVarles:case_Id 用例IDcase_module用例模块case_name用例名称case_server用例地址case_url请求地址case_method请求方法case_type请求类型case_data请求参数case_headers请求头case_preposition前置条件case_isRun 是否执行case_code 状态码case_result 期望结果if __name__ __main__:opExcel OperationExcel()# opExcel.getSheet()# print(opExcel.getExcelData())opExcel.writeExcelData(1, 7, ftest{2})excel 文件内容如图 封装用例 # test_api_all.py # 参数化运用所有用例 import json import pytestfrom utils.operationExcel import OperationExcel, ExcelVarles from base.method import ApiRequest from common.log import loggeropExcel OperationExcel() apiRequest ApiRequest()pytest.mark.parametrize(data, opExcel.getExcelData()) # 装饰器进行封装用例 def test_api(data, login_tokenNone):if data[ExcelVarles.case_isRun] N :logger.info(跳过执行用例)return# 请求头作为空处理并添加tokenheaders data[ExcelVarles.case_headers]if len(str(headers).split()) 0:passelif len(str(headers).split()) 0:headers json.loads(headers) # 转换为字典# headers[Authorization] login_token # 获取登录返回的token并添加到读取出来的headers里面headers headers# 对请求参数做为空处理params data[ExcelVarles.case_data]if len(str(params).split()) 0:passelif len(str(params).split()) 0:params paramsurl data[ExcelVarles.case_server] data[ExcelVarles.case_url] ? paramsr apiRequest.all_method( data[ExcelVarles.case_method] ,url, headersheaders)logger.info(f响应结果{r})responseResult json.loads(r)case_result_assert(data[ExcelVarles.case_code], responseResult[code])# 断言封装 def case_result_assert(expectedResult, actualReuls) :断言封装:param expectedResult: 预期结果:param actualReuls: 实际结果:return:assert expectedResult actualReuls # 状态码封装日志文件 # log.py #!/usr/bin/python # -*- coding: utf-8 -*- import logging import time import osfrom common.contentsManage import logDir# BASE_PATH os.path.dirname(os.path.dirname(os.path.realpath(__file__))) # # 定义日志文件路径 # LOG_PATH os.path.join(BASE_PATH, log) # if not os.path.exists(LOG_PATH): # os.mkdir(LOG_PATH)# 方法1 # 封装自己的logging class MyLogger:def __init__(self):self._logName os.path.join(logDir(), {}.log.format(time.strftime(%Y%m%d)))self._logger logging.getLogger(logger)self._logger.setLevel(logging.DEBUG)self._formatter logging.Formatter([%(asctime)s][%(filename)s %(lineno)d][%(levelname)s]:%(message)s)self._streamHandler logging.StreamHandler()self._fileHandler logging.FileHandler(self._logName, modea, encodingutf-8)self._streamHandler.setFormatter(self._formatter)self._fileHandler.setFormatter(self._formatter)self._logger.addHandler(self._streamHandler)self._logger.addHandler(self._fileHandler)# 获取logger日志记录器def get_logger(self):return self._loggerlogger MyLogger().get_logger()封装请求方法 # method.py import json import requests from common.log import logger from utils.commonUtils import isJsonclass ApiRequest(object):# ---- 第一种请求方式封装requests库调用可根据实际情况传参 ----# def send_requests(self, method, url, dataNone, paramsNone, headersNone,# cookiesNone,jsonNone,filesNone,authNone,timeoutNone,# proxiesNone,verifyNone,certNone):# self.res requestes.request(methodmethod, url url, headersheaders,datadata,# paramsparams, cookiescookies,json json,filesfiles,# authauth, timeout timeout, proxiesproxies,verifyverify,# certcert)# return self.res# 第二种封装方法def get(self, url, dataNone, headersNone, payloadNone):if headers is not None:res requests.get(urlurl, datadata,headersheaders)else:res requests.get(urlurl, datadata)return resdef post(self, url, data, headers, payload:dict, filesNone):if headers is not None:res requests.post(urlurl, datadata, headersheaders)else :res requests.post(urlurl, datadata)if str(res) Response [200] :return res.json()else :return res.textdef put(self,url,data,headers, payload:dict, filesNone):if headers is not None :res requests.put(urlurl,datadata,headersheaders)else:res requests.put(urlurl,datadata)return resdef delete(self,url,data,headers, payload:dict):if headers is not None :res requests.delete(urlurl,datadata,headersheaders)else:res requests.delete(urlurl,datadata)return resdef all_method(self, method, url, dataNone, headersNone, payloadNone, filesNone):logger.info(f请求方法是{method}, 请求地址{url})if headers None:headers {}if method.upper()GET:res self.get(url,data,headers, payload)elif method.upper()POST:res self.post(url, data, headers, payload, files)elif method.upper() PUT:res self.put(url, data, headers, payload, files)elif method.upper() DELETE:res self.delete(url, data, headers, payload)else :res f请求{method}方式不支持或者不正确return json.dumps(res, ensure_asciiFalse, indent4, sort_keysTrue, separators(,,:))运行 # run.py import shutil import pytest import osfrom common.log import logger import subprocess # 通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序 from common.contentsManage import htmlDir, resultDirif __name__ __main__:htmlPath htmlDir()resultPath resultDir()if os.path.exists(resultPath) and os.path.isdir(resultPath):logger.info(清理上一次执行的结果)shutil.rmtree(resultPath, True)logger.info(开始测试)pytest.main([-s, -v, --alluredir, resultPath]) #运行输出并在resport/result目录下生成json文件logger.info(结束测试)# 如果是代码单独执行需要立马看到报告可以执行下面语句如果配合Jenkins使用则可以不需要执行Jenkins自带的插件allure会操作# logger.info(生成报告)# subprocess.call(allure generate resultPath -o htmlPath --clean, shellTrue) # 读取json文件并生成html报告,--clean诺目录存在则先清楚# logger.info(查看报告)# subprocess.call(allure open -h 127.0.0.1 -p 9999 htmlPath, shellTrue) #生成一个本地的服务并自动打开html报告依赖包安装可以执行命令 pip3 install -r requirements.txt来安装 # requirements.txt pytest7.4.3 pytest-html4.1.1 pytest-xdist3.5.0 pytest-ordering0.6 pytest-rerunfailures13.0 allure-pytest2.13.2 xlrd1.2.0 requests2.31.0至此项目的代码框架就基本结束了 6、安装并配置Jenkins Jenkins的安装看你需要在Windows还是Linux下安装具体教程可以网络查找 Jenkins安装allure插件 Jenkins安装并登录后可以创建任务 添加构建步骤根据你安装环境的不同选择不同的构建 添加构建后操作选择 allure Report 配置代码执行的结果地址 运行测试后可以在任务中查看allure生成的报告 至此jenkinspythonpytestrequestsallure的接口自动化测试就记录到这里刚兴趣的可以去看看pytest的官方文档了解更多知识。 行动吧在路上总比一直观望的要好未来的你肯定会感谢现在拼搏的自己如果想学习提升找不到资料没人答疑解惑时请及时加入群 1007119548里面有各种测试开发资料和技术可以一起交流哦。 最后 下方这份完整的软件测试视频教程已经整理上传完成需要的朋友们可以自行领取 【保证100%免费】 软件测试面试文档 我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。
http://www.w-s-a.com/news/155657/

相关文章:

  • 内容展示型网站特点在北京注册公司需要多少钱
  • h5网站源代码创意设计理念
  • 岳阳网站开发服务推广运营平台
  • 网站开发得多长时间湖南建设人力资源网证书查询
  • 论坛网站开发网络营销是什么时候产生的
  • 帮人做网站赚钱无忧软文网
  • 做网站要不要营业执照重庆网站优化seo公司
  • 学院宣传网站建设简介做网站没灵感
  • 网站建设终稿确认书网站意义学校
  • 3小时网站建设平台专业制作教学课件
  • 曲阜网站建设百度开户现货黄金什么网站可以做直播
  • 比较好的企业建站平台小程序开发外包该注意些什么
  • 建行官网官网网站吗二次元风格wordpress模板
  • 怎样开通自己的网站网址导航哪个主页最好
  • 大良o2o网站建设详情页设计说明怎么写
  • 您与此网站之间建立的连接不安全汽车cms系统是什么意思
  • 有没有做logo的网站企业网站的内容营销
  • 哈尔滨做企业网站怎么做网站自动响应
  • 网站建设硬件和软件技术环境配置签约做网站模板
  • 教育网站建设的素材手机app制作流程
  • 免费行情软件网站大全下载网站备案查询
  • flex网站模板wordpress实时预览
  • 建设银行网站模板为什么企业要建设自己的企业文化
  • 网站建设必知免费手机网站建站系统
  • ssh可以做wap网站么嘉兴seo排名
  • 站内优化包括哪些帝国做企业网站
  • 做网站seo赚钱吗网络维护和故障维修
  • 企业网站可以自己做摄影网站开发背景怎么写
  • 网站百度指数seo最好的工具
  • 宝安专业网站建设推荐设计感强的网站