Python

自己写一个手机菜谱APP

需要的技术及工具:

  • Python3 + Selenuium
  • Golang net/http
  • React-Native 相关(使用了react-navigation)
  • MongoDB
  • Redis

代码地址:

项目构思及构成 #

食谱类型的App,应用市场肯定有更好的的食谱APP。所以自己开发的目的,首先是写代码,其次是定制APP~ 好的,现在化身产品经理,设计一下APP有哪些功能:

  • 每日菜谱推荐,推荐可更换
  • 每天需要准备的材料提醒
  • 发现更多菜谱
  • 分类筛选菜谱
  • 搜索菜谱
  • 查看菜谱详情
  • 设置(不知道设置啥,提前准备吧)

设计稿?不存在的,随心所欲。

现在分析下我需要做的事情:

  1. 能跑起来的APP,与restful web api 交互。
  2. 能跑起来的web-api,提供菜谱数据,筛选,推荐,搜索等功能
  3. 能跑起来的简易spider,从网上获取菜谱信息。(这个爬虫能解析动态生成网站就够用了,姑且称之为爬虫吧)

没有考虑大量数据,因此爬虫并不通用,只适合特定XX网站。

实战爬虫 #

这个APP里面最重要的就是菜谱数据了,那么开发之前,需要明确的数据格式,如下:

{
    "name": "name",
    "cat": "cat",
    "img": "img_url",
    "mark_cnt": 19101,
    "view_cnt": 181891,
    "setps": [
        {
            "desc": "",
            "img": "",
        },
        // more step
    ],
    "material": {
        "ingredients": [
            {
                "name": "ingredients_name",
                "weight": "ingredients_weight",
            },
            // more ingredients
        ],
        "seasoning": [
            {
                "name": "seasoning_name",
                "weight": "seasoning_weight",
            },
            // more seasoning
        ],
    },
    "create_time": "2018xxxxxx",
    "update_time": "2018xxxxxx",
}

目标 #

前提:无法直接获取到该网站的服务API,才使用爬虫间接获取数据。

...

docker+selenium+python构建前端自动化分布式测试环境

docker + selenium + python 构建前端自动化分布式测试环境。利用seleninum-grid分布式框架,python编写测试代码,docker部署来进行前端自动化测试

2018-2-1 更新 使用docker-compose编排

分布式部署的优点 #

自动化的优缺点就不再重复了,主要分析下docke部署和分布式的优势

  • 提高自动化的测试效率(分布式)
  • 方便打包和持续集成(docker)
  • 解决多人coding,却因为路径不一致导致无法运行的问题(当然也可以通过其他方式来解决~)

这里还有一个问题就是:使用docker部署方式运行测试代码,是看不见本地浏览器启动的,因此在调试测试代码的时候,需要一定的工具来协助,譬如VNC viewer

开篇-selenium #

大家都知道 Selenium 是支持多种浏览器多个编程语言的一个自动化测试工具。而 Selenium Grid 是一种可以让用户在不同的环境和不同的浏览器上并行运行 web 测试用例的框架。换而言之,使用 Selenium Grid 可以让我们在分布式测试环境下执行测试,例如 Windows,Linux,Mac OS,Andoid/iOS 等等,这样可以大大减少重复的工作量,提高我们的工作效率。

selenium分布式结构如图: selunium-grid

搭建分布式环境 #

在Dockerhub已经具有了相应的selenium的镜像,我们直接使用就行了

拉取镜像 #

docker pull selenium/hub
docker pull selenium/node-chorme-debug

关于node-chrome-debugnode-chrome的区别: 暂未研究

运行容器 #

docker run -d -p 4444:4444 --name sel-hub selunium/hub # 运行hub服务
docker run -d -p 5900:5900 --link sel-hub:hub selunium/node-chrome-debug # 运行slenium chrome 节点
# more node could append like node-chrome-debug

查看节点信息 #

在浏览器中打开http://127.0.0.1:4444/grid/console 这里需要注意的是,如果是在本地运行的容器,并映射4444端口,因此得到127.0.0.1:4444,如果是在虚拟机中运行,ip和端口应该根据网络来获取相应的IP和PORT

...

pytest用法小结

pytest最常用法总结,当然不止这一点功能。关于更多更强大的插件,可以根据自己需要来定制。

安装 #

pytest 安装和使用都非常简单, 只需pip install pytest

编写测试代码 #

使用pytest,不需要像unittest模块一样,pytest使用的是python自带的assert,如:

def test_global_function():
    assert 1 == 1

使用pytest.mark #

pytest.mark 用于给测试方法打上标签,在稍后的执行中会讲到如何使用marker

@pytest.mark.marker_self
def test_global_function():
    assert 1 == 1

使用pytest.fixture #

@pytest.fixture
def google_url():
    return "http://google.com"

setup 和 teardown #

setupteardown方法作用范围,分为全局作用,类作用,方法作用

  • 全局:作用于全局测试函数
  • 类: 作用于自身类
  • 类方法: 作用于类函数

简单举例: #

# 全局
def setup_function(function):
    print("setup function global")

def teardown_function(function):
    print("teardown function global")

# 类
class Test_fixture:

    @classmethod
    def setup_class(cls):
        print("class setup method")

    @classmethod
    def teardown_class(cls):
        print("class teardown method")

# 类方法
    def setup_method(self, method):
        print("class method setup function")

    def teardown_method(self, method):
        print("class method teardown function")

pytest配置文件 #

配置文件名为pytest.ini setup.cfg tox.ini 关于配置文件优先级请查阅官方文档 简单举例:

...

访问量 访客数