个人比较业余,只会 Python 写点东西,搞不懂一些装饰器干啥用的,看 API 参考没能整明白
有什么项目供练手,最大挖掘、更熟悉 pytest ?
]]>import requests import pytest class TestRestApi(): url = 'http://xxx.com' @pytest.fixture(scope="session") def http_session(self): # 省略设置 cookie 等步骤,返回一个 request.session 对象 return requests.Session() def test_api_a(self, http_session): respOnse= http_session.post(self.url + '/app/sessioncontextget', json=body) assert response.status_code == 200 data = response.json() # 我想保存此 api 的一个返回值 self.session_id = data['data']['session_id'] assert data['code'] == 200 def test_api_b(self, http_session): body = { # 请求参数依赖前一个 api 的返回值 "sessionid": self.session_id, } respOnse= http_session.post(self.url_ge + '/api/taskcreate', json=body) assert response.status_code == 200 data = response.json() assert data['errcode'] == 0
断点调试发现 session_id 是设置成功了的, test_api_a 也测试通过
但运行到 test_api_b 时却提示:AttributeError: 'TestRestApi' object has no attribute 'session_id'。不过这也很好理解,单测本来就是每个 case 独立的,每次相当于都是重新运行。
那么问题来了,这个需求怎么解决?
还有一个问题, pytest.fixture 的特性感觉不是很方便, http_session 变量无法被 IDE 识别,没有代码提示了(不过这个影响很小),关键是每个测试 case 都要传入 http_session 参数,感觉不够简洁。
初次使用 py.test ,可能理解不是很透彻,还请见谅。
]]>对于某一个用户自定义的方法都可以通过 Navigate->Test 来创建单测
用 Intellij 的 Maven 框架的话,创建单元测试非常舒服,自动会在对应的 test 目录下面建立相应的文件
例如 src/main/java/abc/run.java 对应的测试文件是 test/java/abc/runTest.java
但是 Pycharm 就蛋疼了,同样自动创建单元测试,其目录结构直接就是在相同目录下创建 例如在 src 目录下 src/abc/run.py 自动创建的文件位置 src/abc/test_run.py
巨丑,,
目前我是手动集中到一个新建的 test 目录下,尽量模仿 Maven 格式,但总觉的路子有点野
不知道有木有 Python 大神,知道正规 or 人性化 的 Python 单测方法
]]>