Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
K
kb
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 2
    • Issues 2
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • Operations
    • Operations
    • Incidents
  • Analytics
    • Analytics
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • granite
  • kb
  • Wiki
    • Basic_guidelines
  • project_build

Last edited by 李林坳 Dec 21, 2021
Page history

project_build

python项目开发&管理

  • 基础环境管理
  • 编码规范&规范化
  • 单元测试规范

环境管理

  1. 使用Anaconda和Pipenv共同管理Python环境(需细化)
  • 包管理(自研、第三方)
  • 自动化
  1. poetry 依赖、打包、构建、区分环境 (https://python-poetry.org/docs/master/)
  • poetry build # 构建可安装的 *.whl 和 tar.gz 文件
  • poetry shell # 会根据定义在 pyproject.toml 文件中的依赖创建并使用虚拟环境
  • poetry run pytest # 运行使用 pytest 的测试用例,如 tests/test_sample.py
  • poetry run python -m unittest tests/sample_tests.py # 运行 unittest 测试用例
  • poetry export --without-hashes --output requirements.txt # 导出 requirements.txt 文件, --dev 导出含 dev 的依赖,或者用 poetry export --without-hashes > requirements.txt

示例:

1. 创建项目

peotry new --src app_ppid

修改READMD.rst 文件格式 cd app_id && mv README.rst README.md

创建数据清洗目录 mkdir -p src/app_ppid/dataclean/udms && cp src/app_ppid/__init__.py src/app_ppid/dataclean && cp src/app_ppid/__init__.py src/app_ppid/dataclean/udms

mkdir -p src/app_ppid/dataclean/common && cp src/app_ppid/__init__.py src/app_ppid/dataclean/common

mkdir -p src/app_ppid/dataclean/resources

创建爬虫目录

2. 安装

从pyproject.toml文件中读取依赖,并安装poetry install

poetry install --without dev --sync
poetry install --with docs --sync
poetry install --only dev
3. 安装单个包

poetry add requests pendulum

poetry add pendulum@^2.0.5 poetry add "pendulum>=2.0.5"

poetry add requests --dev

4. 编译打包

poetry build

5. 测试

poetry run

项目结构

-- app_ppid         # 项目名称
  -- readme.md           # 说明文档
  -- pyproject.toml      # 项目管理配置文件
  -- tests                # 项目测试总目录
  -- src                # 项目源码主目录
     -- app_ppid        # 数据清洗总目录
        -- udms          # udm 模块
           -- qcc_region_list_task # udmd2
        -- common        # 项目共用代码包
           -- utils      # 包1
        -- resources         # 资源文件
           -- collie_version.txt  # 版本文件
           -- data_pump     # data_pump 配置文件
           -- 其他资源文件
      --- spider             # 爬虫总目录
          -- scrapy          # scrapy 型爬虫
          -- udms            # udm 型爬虫
          -- resources        # 资源文件

主要包括数据清洗(dataclean)、爬虫(spider)、测试(test) 3个部分

  • 代码中import使用完整包路径,不能使用相对引用。pycharm中右键项目app_person_id, Mark Directory as Source Root
  • 测试代码路径与源代码路径保持一致。
1. 数据清洗(dataclean)

分为代码(src)、资源文件(resource)两个目录

  • 代码src,存放代码文件: .py、.sh、.java、.scala等
  • 资源文件resources, 存放资源文件,比如.txt、.yml、.conf、.json等资源类文件
2. 爬虫(spider)

分为scrapy、udms、resources三个目录

  • scrapy 爬虫
  • udms 非scrapy爬虫
  • resources 资源文件
3. 测试(test)

根据数据清洗、爬虫的代码路径,实际生成对应路径的测试用例代码

4. readme.md

编码规范&规范化

PEP8

需细化

  1. 遵从PEP8规范写代码
  2. 理解PEP8指导原则的原因
  3. 配置符合PEP8标准开发环境

单元测试规范

  1. 单元测试
    1. 框架
    2. 规范
    3. 示例

pytest 框架

  1. 兼容性好: 支持 Python 2.7,Python 3.4+。
  2. 与 unittest 和 nose 测试框架兼容: 如果之前测试用例全部是基于 unittest 或者 nose 来编写的,执行 Pytest 命令同样可以正常运行并得到结果。
  3. 丰富的插件支持: 大约有 300 多个,像 Pytest-repeat, pytest-xdist,pytest-ordering,pytest-rerunfailures 以及 pytest-html 这些常用插件在测试重复执行、并发与生成报告方面都提供了非常强大的支持。
  4. 允许直接使用 assert 进行断言:相比 unittest 简单,unittest 定义了 assertEqual、assertIn、assertTrue、assertFalse 等一系列断言。
  5. 可以自动寻找单测文件、类和函数:Pytest 要求所有的单测文件名都需要满足 test_.py 格式或_test.py 格式。在单测文件中,可以包含 test_ 开头的函数,也可以包含 Test 开头的类。在单测类中,可以包含一个或多个 test_ 开头的函数。在执行 Pytest 命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。
  6. 提供应用不同范围前置/后置方法: Pytest 提供了模块级、函数级、类级、方法级的setup/teardown,比 unittest 的 setUp/tearDown 更灵活。
  7. 分类执行与测试数据参数化简单 : unittest 需依赖 ddt 库实现数据参数化,而 Pytest 直接使用@pytest.mark.parametrize 装饰器。

参数化测试

标签化测试

mock测试

Clone repository
  • README
  • basic_guidelines
  • basic_guidelines
    • basic_guidelines
    • dev_guide
    • project_build
    • 开发流程
  • best_practice
  • best_practice
    • AlterTable
    • RDS
    • azkaban
    • create_table
    • design
    • elasticsearch
    • elasticsearch
      • ES运维
    • logstash
View All Pages