项目的工程目录:

  • py_53 --根目录

    • py_api --子目录

      • day18_项目框架搭建 --项目工程目录

        • common —公用模块

          • excle.py -获取Excel表单的数据
          • handler_log.py -日志的封装
        • config --配置模块
          • setting.py -相关文件的配置
          • init.py
        • conf_ini --配置模块
          • d1_ini.ini
          • d2_ini文件读取.py
        • data --用例读取模块
          • case.xlsx
        • logs --日志模块
          • py53.log
        • reports --case报告模块
          • report.html
        • tests --用例模块
          • test_register.py
          • test_login.py
        • unitcase
          • test_excel.py
            main.py --主程序入口
            总结.md
            init.py
day_18项目框架搭建- api* helper.py* __init__.py- common* headler_excel.py* headler_log.py- conf_ini* d1_ini.ini* d2_ini文件读取.py- data * case.xlsx- logs --日志模块* py53.log- reports --case报告模块* report.html- tests --用例模块* test_register.py* test_login.py- unitcase* test_excel.pymain.py --主程序入口总结.md__init__.py
# helper.py
def login(username, passwd):"""业务"""# 到底怎么才能去访问接口"""登录功能。 开发写的接口"""response = {"message": None,"code": None,"token": None}if username == 'kino' and passwd == '123456':response['message'] = 'success'response['code'] = 200response['token'] = "good token"return responseif username == '':response['message'] = '用户名为空'response['code'] = 400return responseif passwd == '':response['message'] = '密码为空'response['code'] = 400return responseelse:response['message'] = '用户名或密码错误'response['code'] = 400return response
# hander_excel.py
import openpyxl
from openpyxl.worksheet.worksheet import Worksheetdef read_excel_dict(file, sheet_name="Sheet1"):"""读取excel"""# 打开文件workbook = openpyxl.load_workbook(file)# 选择表单,表格 Sheet1sheet: Worksheet = workbook[sheet_name]data = list(sheet.values)title = data[0]rows = data[1:]data = [dict(zip(title, row)) for row in rows]return dataif __name__ == '__main__':# 1,当你想测试这个模块功能的时候,单独来点击播放件,执行下面的测试代码。# 2,当其他模块调用这个模块时候,下面的测试代码就不会执行了。# 模块当中就是只有各种定位,函数,类fspath = r'/Users/zhangping/Documents/py_53/py_api/day18_项目框架搭建/data/cases.xlsx'data = read_excel_dict(fspath)print(data)
# handler_log.py
from loguru import logger
from py_api.day18_项目框架搭建.config.setting import Configlogger.add(Config.LOG_FILE, encoding='utf-8')
# d1_ini.ini
[default]
host=http://www.yuz.com
hobby=[1,2,3][db]
host=http://www.yuzwang.com
port=3306
name="py"
connected=true
# d2_ini文件读取.py
from configparser import ConfigParserparser = ConfigParser()
parser.read('d1_ini.ini', encoding='utf-8')# 读取配置项
host = parser.get('default', 'host')
print(host)port = parser.get('db', 'port')
print(port)
print(type(port))hobby = parser.get('default', 'hobby')
print(hobby)
print(type(hobby))
# setting.py
class Config:# 域名HOST = 'http://example.com'# 端口PORT = 8080# 测试用例文件名CASE_FILE = r'/Users/zhangping/Documents/py_53/py_api/day18_项目框架搭建/data/cases.xlsx'# log 存储的文件LOG_FILE = r'/Users/zhangping/Documents/py_53/py_api/day18_项目框架搭建/logs/py53.log'
# case.xlsx
# py53.log
2022-09-05 17:45:46.586 | INFO     | test_login_8:test_login:28 - 正在测试...
2022-09-05 17:45:46.587 | ERROR    | test_login_8:test_login:39 - {'message': 'success', 'code': 200, 'token': 'good token'} != None
2022-09-05 17:45:46.588 | INFO     | test_login_8:test_login:28 - 正在测试...
# report.html
# test_login.py
import unittest
from py_api.day18_项目框架搭建.api.helper import login
from py_api.day18_项目框架搭建.common.excel import read_excel_dict
from unittestreport import ddt, list_data
from py_api.day18_项目框架搭建.common.log_handler import logger
from py_api.day18_项目框架搭建.config.setting import Config# 从配置文件倒入用例文件
data_file = Config.CASE_FILE
cases = read_excel_dict(data_file, "Sheet1")@ddt
class TestLogin(unittest.TestCase):@list_data(cases)def test_login(self, case):# 获取参数data_str = case['data']logger.info("正在测试...")# 字符串要转成字典data = eval(data_str)# 把单元(被函数) 改成被测接口, 接口访问过程actual = login(data['username'], data['passwd'])expected = case['expected']expected = eval(expected)try:self.assertEqual(expected, actual)except AssertionError as e:logger.error(e)raise e# test_excelfrom py_api.day18_项目框架搭建.common.excel import read_excel_dictdef test_excel():fspath = r'/Users/zhangping/Documents/py_53/py_api/day18_项目框架搭建/data/cases.xlsx'data = read_excel_dict(fspath)print(data)
# main
# 主程序import unittest
import unittestreport# 填入开始目录, 符合规则的用例会被自动收集
suit = unittest.defaultTestLoader.discover('tests')
print(suit)# 运行
# result = unittest.TextTestRunner().run(suit)
# print(result)# 定制化的运行器和测试报告。
runner = unittestreport.TestRunner(suit,title='项目测试报告',tester='Memory.荒年〆',desc="企业专用项目",templates=2)
runner.run()
  • case.xlsx
  • report.html

总结

项目框架搭建(面试题)

目标:执行接口自动化测试

  • 必须要支持可以编写自动化用例(测试函数) DONE
  • 用例数据,Excel, yaml, py DONE
  • 大多数的自动化测试用例都是手工测试转成的。
  • 支持读取Excel操作 DONE
  • 收集用例,运行,生成报告 DONE
  • 支持日志处理 logging DONE
  • 支持配置文件处理 py DONE
  • 支持邮件发送(框架实现, Jenkins)
  • 支持数据驱动 DONE
  • 支持接口访问 doing…

怎么实现的:

  • 分层设计, 介绍各种包,各个模块的用途

对自己写的代码简单的自测

  • main 函数

分层设计

好处:方便维护和管理

  • cases 用例
  • 通用程序, common
  • 辅助函数,通常和项目,业务有关, api
  • 测试数据独立管理

day18_项目框架搭建1相关推荐

  1. (三) Angular2项目框架搭建心得

    前言: 在哪看到过angular程序员被React程序员鄙视,略显尴尬,确实Angular挺值得被调侃的,在1.*版本存在的几个性能问题,性能优化的"潜规则"贼多,以及从1.*到2 ...

  2. 【高校宿舍管理系统】第一章 建立数据库以及项目框架搭建

    第一章 建立数据库以及项目框架搭建 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 第一章 建立数据库以及项目框架搭建 前言 一 ...

  3. SpringBoot后端项目框架搭建

    SpringBoot后端项目框架搭建 本节内容服务于SpringBoot + Vue 搭建 JavaWeb 增删改查项目. 工具安装 电脑已安装\配置如下工具: IDEA.jdk.MySQL及其可视化 ...

  4. SpringSecurity(二)、权限项目框架搭建

    Springboot + SpringSecurity权限项目框架搭建 目录 一.项目介绍 二.项目搭建(父子工程) 1.添加 pom 依赖 2.修改 yml 配置 3.编写JwtTokenUtil工 ...

  5. Android最好用的项目框架搭建

    本篇先记录下当前项目中涉及的主要技术要点.也算是对所作项目的一次总结.如果这个过程能对你有些许的帮助,那可能就显得有意义点了. 一个完整的Android项目会涉及后台和前端.我们只关注于前端,也就是我 ...

  6. spring cloud多模块项目框架搭建-Redis-Cluster集群搭建及系统集成

    第九章 Redis-Cluster集群搭建及系统集成 本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块微服务项目框架,并不是一个spring cloud的demo而已,提供系统 ...

  7. spring cloud多模块项目框架搭建-集成lombok

    第五章: spring cloud多模块项目框架搭建-集成lombok 本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块微服务项目框架,并不是一个spring cloud的de ...

  8. spring cloud多模块项目框架搭建-集成SLF4J和log4j2日志组件

    第七章  集成SLF4J和log4j2进行日志管理 本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块项目框架,并不是一个spring cloud的demo而已,提供分布式系统的 ...

  9. [Vue 牛刀小试]:第十六章 - 针对传统后端开发人员的前端项目框架搭建

    一.前言 在之前学习 Vue 基础知识点的文章中,我们还是采用传统的方式,通过在 html 页面上引用 vue.js 这个文件,从而将 Vue 引入到我们的项目开发中.伴随着 Node.js 的出现, ...

最新文章

  1. 归并排序原理及代码模板
  2. mysql client 5.1.34_mysql最新版
  3. POJ 2217:Secretary(后缀数组)
  4. [YTU]_2499( 处理成绩(c++类训练))
  5. linux 移植qt,Linux下移植QT(2)---移植QT
  6. ocbase 数据库 蚂蚁_iOS开发数据库篇—FMDB简单介绍
  7. 4线电子围栏安装示意图_电子围栏报警系统安装施工过程(图解)
  8. 一文读懂什么是DDS
  9. android dex2oatd e,解決android項目Error:Execution failed for task ':app:dexDebug'.ebug'錯誤
  10. Linux_c++ TCP套接字编程函数
  11. Mysql导入导出时遇到的问题
  12. uniapp实现IM即时通讯仿微信聊天功能
  13. 是时候适配 Swift 3 了吗——专访 LINE iOS 开发工程师王巍
  14. 绿盟科技2019校园招聘笔试题附加题
  15. 如何快速把多个excel表合并成一个excel表(不熟悉vba及公式的人)
  16. 中关村回收贩曝黑幕:翻新一部iPhone4可赚2000元
  17. Mobility First与NDN的比较
  18. Java毕设项目共享充电宝系统(java+VUE+Mybatis+Maven+Mysql)
  19. Java项目:SSM二手汽车交易商城网站管理系统
  20. CSDN浏览器助手安装说明书

热门文章

  1. python 如何远程控制另一台机器-通过cmd执行文件
  2. html5调用静态库,如何在VS2010项目中引用Lib静态库(以Openssl为例)
  3. 戴上口罩AI变“脸盲”?口罩人脸识别黑科技来袭
  4. Rplidar A2 激光雷达使用hector_slam进行建图
  5. 百度鹰眼android开发,百度鹰眼Android SDK 运行配置
  6. 基于STM32的常用数码管芯片TM1650驱动
  7. 使用了却报错值没有使用_使用没有
  8. Python 爬虫之urllib库的使用
  9. linux指定分区label,Linux_Linux中分区挂载和LABEL的指定,让Linux开机就挂载分区,我知 - phpStudy...
  10. QQ聊天记录快速迁移