我的项目有一个Web界面,提供MyPackage Python模块的一些功能。基本上它是所有路线相同的一页。我甚至不在这里使用数据库。有没有可以测试的东西?
class MyTextForm(FlaskForm):
text_content = StringField('mytextfield', validators=[DataRequired(), Length(20, 30)], widget=TextArea())
@app.route('/', methods=['POST', 'GET'], defaults={'sub': 'sub1'})
@app.route('/subpage/<sub>', methods=['POST', 'GET'])
def index(subpage):
form = TweetTextForm()
prediction_results = dict()
try:
model = app.models[subpage]
if form.validate_on_submit():
result = model.process(request.form["text_content "])
return render_template('template.html',
value1=value1,
value2=value2,
form=form,
data=model.get_data())
except Exception:
abort(404)
我还应该测试jinja模板吗? 我不确定应该在那里测试什么?
答案 0 :(得分:0)
是的,您可以测试您的网页是否加载并按照您期望的方式使用Selenium之类的内容。例如,你可以让Selenium打开一个浏览器,转到你的每个url路由,并确认它正在正确加载元素。
这不会测试您的视觉效果,但它可以让您确认后端和模板正在执行它们应该执行的操作。
你可能有类似的东西:
integration_tests.py
import unittest
from selenium import webdriver
class PageLoadTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
def tearDown(self):
self.driver.quit()
def test_main_page(self):
self.driver.get('/subpage/sub')
element_to_check = self.driver.find_element_by_tag_name('name_of_element_tag_you_want_to_check')
self.assertEqual(element_to_check.text, 'text that should be there')
if __name__ == '__main__':
unittest.main()
然后你可以启动测试服务器并从shell调用它来运行测试(使用单独的终端):
服务器终端:
$ flask run
命令终端:
$ python integration_tests.py
我还建议使用html_sanitizer和BeautifulSoup添加和测试(单位和集成/功能)表单元素和<sub>
变量的一些输入验证/清理不需要的HTML等。