Flask测试客户端、测试Web服务、端到端测试(Selenium)、http状态码、centos7无GUI下使用selenium、Youtobe上Flask课程学习、爬虫部分、SQLAlchemy复习
学习日记-2019530
Flask测试客户端
视图函数只能在请求上下文和运行中的程序里运行
在测试客户端中运行的视图函数和正常情况下的没有太大区别,服务器收到请求,将其分配给适当的视图函数,视图函数生成响应,将其返回给测试客户端。执行视图函数后,生成的响应会传入测试,检查是否正确。
运行Python flasky.py test
遇到报错:
1 | KeyError: <flask.cli.ScriptInfo object at 0x7fa84a4566a0> |
解决
1 | (microvenv) [root@~ microblog]# export FLASK_APP=flasky.py |
但是运行结果如下,并没有执行客户端测试,可能是命令不对
1 | (microvenv) [root@iz2ze8rern8nx1sglo8ub1z microblog]# python flasky.py test |
好吧,是我把文件名写错了导致unittest发现不了以test_*开头的测试用例
1 | (microvenv) [root@iz2ze8rern8nx1sglo8ub1z microblog]# python flasky.py test |
- 测试用例
1 | """ |
使用post()方法发送包含表单数据的POST请求,Flask-WTF 生成的表单中包含一个隐藏字段,其内容是 CSRF 令牌,需要和表 单中的数据一起提交。为了复现这个功能,测试必须请求包含表单的页面,然后解析响应 返回的 HTML 代码并提取令牌,这样才能把令牌和表单中的数据一起发送。为了避免在测 试中处理 CSRF 令牌这一烦琐操作,最好在测试配置中禁用 CSRF 保护功能。
test_client.py
1 | """ |
auth/views.py
1 |
|
禁用CSRF保护功能
1 | class TestingConfig(Config): |
测试新账号登录失败
1 | FAIL: test_register_and_login (test_client.FlaskClientTestCase) |
说明响应主体有问题,尝试把响应主体打印出来发现问题是模板渲染时错误
unconfirmed.html
1 | {% extends "base1.html" %}#这里引的我原来的基础模板导致出错 |
这就说明工程大的时候测试是十分必要的,需要一个模块一个模块的测试
response.get_data(as_text=True)
返回的是渲染后的html文件
1 | """ |
测试Web服务
测试API不使用cookie,所以无需配置。get_api_headers()是一个辅助方法,返回所有请求都要发送的通用首部,包括认证密令和MIME类型相关的首部。
很神奇,我测试权限的时候返回403状态码
1 | # 确保web服务拒绝没有提供认证密令的请求,返回401错误码 |
于是我搜了一下403和401状态码区别【下转http状态码】
收到403响应表示服务器完成认证过程,但是客户端请求没有权限去访问要求的资源。那就说明这个请求的时候服务器已经完成认证过程,what?
然后我打印了一下响应主体
1 | def test_token_auth(self): |
1 | test_token_auth (test_api.APITestCase) ... {"error":"forbidden","message":"Invalid credentials"} |
看我们写的api/authentication.py
1 |
|
stackoverflow中说同一用户过于频繁的刷新服务器将导致403
1 | Make sure you are caching the access tokens and that you are making a reasonable number of refresh requests. Refreshing in a tight loop (or too frequently from multiple threads or servers in a cluster) for the same user will lead to 403. |
然后考虑一下是否是权限问题导致,测试时使用的是用户权限,如果改成管理员呢
###提出issue,我有点方
大佬的回复,看来是我api代码有误
明天再检查。。。
端到端测试(Selenium)
因为我的microblog是在阿里云下,所以,对于无界面浏览器采用phantomjs+selenium
【下转:centos7无GUI下使用selenium】
不折腾,等部署好以后在windows下测试
http状态码
【来源】https://blog.csdn.net/grandPang/article/details/47448395
301和302状态码都表示重定向,浏览器在拿到这个状态码后会自动跳转到一个新的URL地址
301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。
301-代表永久性转移(Permanently Moved)
302-代表暂时性转移(Temporarily Moved )
【百度百科】
401错误码
HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝。
您的Web服务器认为,客户端(例如您的浏览器或我们的 CheckUpDown 机器人)发送的 HTTP 数据流是正确的,但进入网址 (URL) 资源 , 需要用户身份验证 , 而相关信息 1 )尚未被提供, 或 2 )已提供但没有通过授权测试。这就是通常所知的“ HTTP 基本验证 ”。 需客户端提供的验证请求在 HTTP 协议中被定义为 WWW – 验证标头字段 (WWW-Authenticate header field) 。
403错误码
403错误,表示资源不可用。服务器理解客户的请求,但拒绝处理它,通常由于服务器上文件或目录的权限设置导致的WEB访问错误。
【来源】https://juejin.im/post/5ad04750518825558b3e57bd
401 “Unauthenticated”
403 Forbidden
401是没有带认证信息或者带了错误的认证信息, 这时客户端可以修改认证信息进行重试; 而403是客户端带了正确的认证信息, 但服务器认为这个认证信息对应的用户是没有对应资源的访问权限的, 因此, 在向管理员获取相关权限之前, 是没有重试的必要的.
centos7无GUI下使用selenium
【来源】https://blog.csdn.net/xds2ml/article/details/52982748
vi /etc/yum.repos.d/google.repo
1 | [google] |
yum install google-chrome-stable
yum update
yum install Xvfb
yum install libXfont
yum install xorg-x11-fonts*
chromedriver下载
wget https://chromedriver.storage.googleapis.com/74.0.3729.6/chromedriver_linux64.zip
Youtobe上Flask课程学习
1 | #linux下 |
查看一下 Nginx 的在 SELinux 中的类型 http_port_t
绑定的端口
1 | root@iz2ze8rern8nx1sglo8ub1z ~]# semanage port -l | grep http_port_t |
开启debug模式
1 | if __name__ == '__main__': |
CSS引用
1 | <link type="text/css" href="{{ url_for('static', filename='main.css') }}"> |
爬虫部分
1.中文词频统计jieba
2.词云https://wordart.com/login?next=/edit/gvh0mvzkyzem
SQLAlchemy复习
1 | from flask_sqlalchemy import SQLAlchemy |
数据库中一对多关系
1 | """ |
一个表只能有一个主键,可以有多个唯一性索引,主键可以被其他字段作外键引用,而索引不能作为外键引用。
外键在其他表是主键,是唯一值。在本表可以有多个,如果其他表没有某个主键值,在本表就不能插入这个外键值。
1 | db.create_all() |
1 | db.drop_all() |