【问题标题】:Flask session-- Test case failureFlask session——测试用例失败
【发布时间】:2022-01-11 22:25:02
【问题描述】:

致力于在会话中存储登录对象。解决方案在本地机器上运行良好。但是测试用例在黑客等级环境中失败。 后续步骤:

  • 创建的登录页面接受用户名和密码
  • 创建路由以将表单中的信息保存为会话对象

user.html

<!DOCTYPE html>
<html lang="en">
<body>
{% block content %}
<!-- write a condition to check if the user in session or not with appropriate response and redirect routes-->
{% if login %}
    Logged in as {{ session['username'] }} 
    <a href="/logout">logout</a>
    {%else%}
    You are not logged in
    <a href="/login">login</a>.
    {%endif %}

{% endblock %}
</body>
</html>

test.py

 def test_login_and_user_page(self):
        soup1 = self.get_soup1()
        msg = soup1.find('p', {'id': 'a'})
        link = soup1.find('a')
        assert msg.text == 'Logged in as admin'
        assert link['href'] == '/logout'

        soup3 = self.get_soup3()
        assert soup3.text == "You've been logged out successfully!"

        soup4 = self.get_soup4()
        msg = soup4.find('p', {'id': 'a'})
        assert msg.text == 'Logged in as user'

    def test_user_page(self):
        soup2 = self.get_soup2()
        msg = soup2.find('p', {'id': 'b'})
        link = soup2.find('a')
        assert msg.text == 'You are not logged in'
        assert link['href'] == '/login'

测试失败:

============================================== FAILURES ==============================================
_______________________________ Test_Webpage.test_login_and_user_page ________________________________

self = <tests.Test_Webpage object at 0x7f8baae8c198>

    def test_login_and_user_page(self):
        soup1 = self.get_soup1()
        msg = soup1.find('p', {'id': 'a'})
        link = soup1.find('a')
>       assert msg.text == 'Logged in as admin'
E       AttributeError: 'NoneType' object has no attribute 'text'

【问题讨论】:

  • 我注意到的一件事是,在 user.html 中,消息周围的 &lt;p&gt; 标签丢失了。据我在测试中看到的,他们过滤了&lt;p&gt; 标签,所以也许这可以解决问题?

标签: python flask session session-variables flask-session


【解决方案1】:

正如我在评论中所写,测试用例尝试过滤 &lt;p&gt; 标签以获取网页上的输出:

msg = soup2.find('p', {'id': 'a'}) # first testcase
msg = soup2.find('p', {'id': 'b'}) # second testcase

但是在你的 html 模板上你只是写下了文字:

Logged in as {{ session['username'] }} 
You are not logged in

如果您将这些消息放入 &lt;p&gt; 标记中并为它们提供正确的 id 它应该可以工作。

<p id="a">Logged in as {{ session['username'] }}</p>
<p id="b">You are not logged in</p>

【讨论】:

  • 感谢@Kevin,当我进行建议的更改时,测试用例通过了。
猜你喜欢
  • 1970-01-01
  • 2011-03-29
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 2021-02-06
  • 2020-12-15
  • 1970-01-01
相关资源
最近更新 更多