やみとものプログラミング日記 やみとものプログラミング日記
TOP 【PythonでWebテスト】リダイレクトとステータスコードのチェック
【PythonでWebテスト】リダイレクトとステータスコードのチェック

【PythonでWebテスト】リダイレクトとステータスコードのチェック

Python プログラミング
作成日時: 2020年4月29日
更新日時: 2020年4月29日
このサイトのリニューアルの際、URLの構造を大幅に変更したのだが、SEO的に旧URLへのアクセスは新URLへ301リダイレクトするべきだと知り、それができているかテストするコードを書いたので紹介します。

注意

Seleniumの導入方法は他のサイトの方が詳しいので「python selenium 使い方」などでググってみてください。

コード

import unittest
from selenium import webdriver
import requests


class SiteTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        # chromeドライバーへのパスはググったページを参考にしてください
        # seleniumを使うためにはブラウザのドライバーが必要です
        cls.driver = webdriver.Chrome("/path/to/chromedriver")

    @classmethod
    def tearDownClass(cls):
        cls.driver.close()
        cls.driver.quit()

    def test_301_redirect(self):
        # アクセスするとリダイレクトされる元のURL
        old_url = "https://aiueo333.com/article.php?id=111"
        # 正しくリダイレクトされた先のURL
        new_url = "https://aiueo333.com/article/111"

        # リダイレクトのチェック
        # old_urlへのアクセスがnew_urlへリダイレクトされるかチェック
        self.driver.get(old_url)
        self.assertEqual(self.driver.current_url, new_url)

        # ステータスコードが301でリダイレクトされるかチェック
        r = requests.get(old_url)
        self.assertEqual(r.history[0].status_code, 301)


if __name__ == '__main__':
    unittest.main()
リダイレクトのチェックはseleniumを使いますが、seleniumだけだとステータスコードが取れないので、ステータスコードについてはrequestsモジュールで取得しています。