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

project_build · Changes

Page history
Create basic_guidelines/project_build authored Dec 21, 2021 by 李林坳's avatar 李林坳
Hide whitespace changes
Inline Side-by-side
Showing with 128 additions and 0 deletions
+128 -0
  • basic_guidelines/project_build.md basic_guidelines/project_build.md +128 -0
  • No files found.
basic_guidelines/project_build.md 0 → 100644
View page @ 5f3d5a2f
## python项目开发&管理
* 基础环境管理
* 编码规范&规范化
* 单元测试规范
### 环境管理
1. 使用Anaconda和Pipenv共同管理Python环境(需细化)
* 包管理(自研、第三方)
* 自动化
2. 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```
创建爬虫目录
```mkdir -p src/spider && mkdir -p src/spider/scrapy && mkdir -p src/spider/umds && mkdir -p src/spider/resources
```
##### 2. 安装
从pyproject.toml文件中读取依赖,并安装```poetry install```
```text
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```
#### 项目结构
```text
-- 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标准开发环境
### 单元测试规范
3. 单元测试
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测试
\ No newline at end of file
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