Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Golang API Testing the HARD way

Golang API Testing the HARD way

Presentations at GoConference 2018 Autumn.

Seiji Takahashi

November 25, 2018
Tweet

More Decks by Seiji Takahashi

Other Decks in Programming

Transcript

  1. API TESTING THE HARD WAY @__timakin__ Go CONFERENCE 2018 Autumn

  2. SEIJI TAKAHASHI timakin @__timakin__ __timakin__ ॴଐɿ(VOPTZ*ODϝσ ΟΞࣄۀຊ෦ ݴޠɿ(P 4XJGU +BWB4DSJQU

  3. ΞδΣϯμ w (Pͷ"1*ͷςετʹ͓͚ΔςελϏϦςΟ w ςετʹؔ͢Δ5JQT w Ϣχοτςετʹ͍ͭͯ w ΠϯςάϨʔγϣϯςετʹ͍ͭͯ w

    ϥΠϒϥϦબఆɺͭ·͍ͮͨՕॴ
  4. None
  5. (Pͷςετϊ΢ϋ΢ w Ϣχοτςετͷޮ཰Խ w (Pͷ༏Εͨඪ४ػೳ

  6. (Pͷςετϊ΢ϋ΢ w Ϣχοτςετͷޮ཰Խ w (Pͷ༏Εͨඪ४ػೳ w .PDL w JOUFSGBDFʹΑΔந৅Խ

  7. (Pͷςετϊ΢ϋ΢ w Ϣχοτςετͷޮ཰Խ w (Pͷ༏Εͨඪ४ػೳ w .PDL w JOUFSGBDFʹΑΔந৅Խ w

    5FTUJOHGSBNFXPSLT
  8. (Pͷςετϊ΢ϋ΢ w Ϣχοτςετͷޮ཰Խ w (Pͷ༏Εͨඪ४ػೳ w .PDL w JOUFSGBDFʹΑΔந৅Խ w

    5FTUJOHGSBNFXPSLT w OFUIUUQIUUQUFTUͷ࢖͍ํ
  9. ςετͷ࣮ྫ ʢಛʹΠϯςάϨʔγϣϯςετʣ ͷྫ͕Կނ͔ෆ଍͍ͯ͠Δʜ

  10. (PͰςετ͢Δ৔߹ͷجຊ w JOUFSGBDFͷ׆༻ w AQBDLBHF[email protected]ͱ͍͏໋໊ w 5BCMF%SJWFO5FTU w 5FTU$BDIF $PWFSBHF

    #FODINBSL
  11. *OUFSGBDFΛ׆༻ͯ͠ΔͱԿ͕͍͍ͷ͔ʁ w ผͷϨΠϠʔͷ࣮૷Λ஌ΒͣʹίʔυΛॻ͖ਐΊΒ ΕΔ w ࣮૷ͷ੾Γସ͕͑༰қʹߦ͑Δ w NPDLੜ੒ʹ࢖͑Δ w αϯϓϧϨεϙϯεͷ࡞੒౳͕೉͍͠


    ֎෦"1*ݺͼग़͠ͳͲͰ໾ʹཱͭ
  12. AQBDLBHF[email protected] w 5FTU1BDLBHFΛ࣮૷ͱ෼཭͢Δ w ࣮ࡍͷݺͼग़͠ํͱܗࣜΛ߹ΘͤΔ w QSJWBUFͳม਺ʹର͢Δࢀর͕Ͱ͖ͳ͍Α͏ʹ͢Δ

  13. 5BCMF%SJWFO5FTU

  14. 5BCMF%SJWFO5FTU w ςετର৅ͱͳΔσʔλ഑ྻɺ
 ظ଴͞ΕΔ݁Ռͷ഑ྻΛΠςϨʔτ͢Δ͜ͱͰ
 ෳ਺ͷςετέʔεΛ؆ܿʹ·ͱΊΒΕΔɻ w ϕϯνϚʔΫΛ෼͚ͨΓɺU1BSBMMFMΛ࢖͍͍ͨ৔߹ ͸4VCUFTUT΋ݕ౼͢Δɻ

  15. 5FTU$BDIF $PWFSBHF #FODINBSL w 5FTU$BDIF
 ςετؔ਺͝ͱʹ*%͕ৼΒΕͯɺ
 ݁Ռ͕ϑΝΠϧʹు͖ग़͞Εͯอଘ͞ΕΔɻ
 Ұக͢Δ݁Ռ͕͋Ε͹࢖͍ճ͢ɻ w $PWFSBHF

    #FODINBSL
 ඪ४Ͱαϙʔτ͞ΕΔ
 ΧόϨοδϨϙʔτͷग़ྗɺϕϯνϚʔΫ
  16. $BDIFʹ͍ͭͯ͸ʜ IUUQTTQFBLFSEFDLDPNUJNBLJOIPXHPDBDIFUFTUT

  17. (PͰςελϏϦςΟʔΛ্͛Δʹ͸ w ͦ΋ͦ΋ςετ͕͠ʹ͍͘ίʔυ͸μ ϝ w JOUFSGBDFͰϞοΫՄೳͳ෦ҐΛ૿΍͢ w ςετϔϧύʔͷॆ࣮ w ϢχοτςετʹدͤΒΕΔͱ͜Ζ͸


    పఈͯ͠دͤΔׂͱେࣄ
  18. (PͰςελϏϦςΟʔΛ্͛Δʹ͸ w ϢχοτςετͷͨΊͷඪ४ػೳ͕
 ௒ॆ࣮͍ͯ͠ΔͷͰɺͦΕΛ׆༻͢ΔͨΊʹ΋ɺ
 Ͱ͖ΔݶΓߏ଄ମͷςετύοέʔδʹ
 ϩδοΫΛूதͤ͞Δɻ w 4FSWJDF૚ʹϑΟϧλϦϯάͷϩδοΫΛ࢒ͨ͠Γ ͠ͳ͍ɻ

  19. ͜͜·Ͱ͕લఏ

  20. Ϣχοτςετͷ࿩

  21. Ϣχοτςετͷ5JQT w 5FTU)FMQFS w 4UVCTUBOEBSEQBDLBHFT w 'JYUVSFT w 5FTUJOHGSBNFXPSLT

  22. 5FTU)FMQFS U)FMQFS ΛݺͿ͜ͱͰɺ
 )FMQFSͷؔ਺ΛςετΛ
 ϚʔΫͯ͠ɺGBJMͨ࣌͠ʹ
 ݺͼग़͠ՕॴΛQSJOUͯ͘͠ΕΔɻ ͜ΕΛݺ͹ͳ͍ͱ಺෦ͰGBJM͠ ͨΓɺॲཧΛڞ௨Խͨ࣌͠ʹਏ ͍ࢥ͍Λ͢Δɻ

  23. 5FTU)FMQFS ඪ४ύοέʔδͷςετ͸ಛʹ)FMQFS͕׆༻͞Ε͍ͯΔ ʢSVO DPQZ'JMF OFX5FNQ%JSʣ

  24. 4UVCTUBOEBSEQBDLBHFT w UJNFύοέʔδɺSBOEύοέʔδͳͲͷ݁ՌΛ࢖͏ ॲཧ͸TUVC͢Δඞཁ͕͋Δ

  25. ελϒํ๏ w άϩʔόϧม਺ͷࠩ͠ସ͑ w ελϒՄೳͳϥούʔ w αʔυύʔςΟύοέʔδͷར༻

  26. άϩʔόϧม਺ͷࠩ͠ସ͑ άϩʔόϧͳม਺ͰมΘΓ͏Δ݁ՌΛऔಘ͢ ΔΑ͏ʹ͠ɺςετ࣌͸ͦΕΛॻ͖׵͑Δɻ ಉ͡஋ͳΒͱ΋͔͘ɺQBSBMMFMͰ΍ͬͨ࣌ʹෆ ͕҆͋Δɻ HPSN͕΍ͬͯΔʜ IUUQTHJUIVCDPNKJO[IVHPSNCMPCNBTUFSVUJMTHP-

  27. ελϒՄೳͳϥούʔ ελϒ༻ͷ஋͕ηοτ͞Εͯ
 ͍ͨΒఆ਺తʹ஋Λฦؔ͢਺Λ
 ఆٛ͢Δɻ

  28. αʔυύʔςΟύοέʔδͷར༻ w ࣌ࠁݻఆ w HJUIVCDPNCFOCKPIOTPODMPDL w HJUIVCDPNULVDIJLJGBLFUJNF w DPEFDMPVEGPVOESZPSHDMPDL

  29. 4UVCTUBOEBSEQBDLBHFT w ʮ༗ޮظݶΛա͗ͨΒΤϯςΟςΟΛແޮԽ͢Δʯ
 Έ͍ͨͳॲཧ͕͋Δ৔߹ɺ࣌ࠁΛ୯७ʹݻఆ͢Δͩ ͚Ͱ͸ͳ͘ਐΊΔඞཁ͕͋Δ w ͦ͏ͨ͠৔߹͸αʔυύʔςΟͷύοέʔδ΋ߟ ྀʹೖΕΔ͕ɺʢ͍ͩͿ࣮૷͕গͳ͍ͷͰʣ
 جຊతʹؔ਺Ͱϥοϓ͢Ε͹ࣄ଍ΓΔͱࢥΘΕΔɻ

  30. 'JYUVSFT w ςετσʔλͷఆٛํ๏ w ߏ଄ମ w ഑ྻͷσʔλߏ଄ʢ5BCMF%SJWFO5FTUʣ w ͦͷଞ w

    +40/ :".-
  31. 'JYUVSFT w ߏ଄ମ w ϙΠϯλΛड͚औͬͯૢ࡞͢Δؔ਺Λςετ͢Δ ৔߹ɺςετ༻ͷม਺ͷݩσʔλ͕มΘΓଓ͚ͯɺ ҙਤ͠ͳ͍ڍಈ͕ى͜Δɻ w 5BCMF%SJWFO5FTUͷΑ͏ʹݸผͷέʔεͰࢀর͢ Δσʔλ͕ҧ͏৔߹͸0,

  32. 'JYUVSFT w +40/ :".- w JPVUJM3FBE'JMFͯ͠ςετσʔλΛಡΈࠐΉ w ಡΈࠐΈ༻ͷσʔλ͸JOQVU ·ͨ͸TSD 


    ൺֱ༻ͷσʔλ͸HPMEFO w "1*ͷϦΫΤετͱϨεϙϯεΛ
 શ෦+40/ఆ͓͍ٛͯͯ͠ςετ͢Δͷ΋͋Γ

  33. 'JYUVSFT w JOQVUHPMEFO w ඪ४ύοέʔδͰͷར༻Օॴ w ςετΧόϨοδϖʔδͷ಺༰ݕূ w (PEPDੜ੒಺༰ݕূ

  34. 'JYUVSFT w JOQVUHPMEFO w ඪ४ύοέʔδͰͷར༻Օॴ w ςετΧόϨοδϖʔδͷ಺༰ݕূ w (PEPDੜ੒಺༰ݕূ w

    ࣮ࡍͷར༻ྫ w "1*ͷϦΫΤετͱϨεϙϯεΛ
 શ෦+40/ఆ͓͍ٛͯͯ͠ςετ͢Δ w εςʔλείʔυ͚ͩνΣοΫ͢ΔΑ͏ͳ৔߹͸ɺ
 ϦΫΤετ͚ͩA TSDAͱ͍͏Α͏ͳ໋໊Ͱఆٛ͢Δͷ΋͋Γ
  35. 5FTUJOHGSBNFXPSLT w ʮ(Pͬͯɺ\\೚ҙͷݴޠ໊^^Ͱ͍͏ͱ͜Ζ\\ͦͷݴޠͷ୅දత ͳςετϑϨʔϜϫʔΫ໊^^ͬͯͳΜ͔ͳ͍ΜͰ͔͢ʁʯ w "1*ϑϨʔϜϫʔΫͰ΋ಉٞ͡࿦͕͋Δͱࢥ͍·͕͢ʜ

  36. 5FTUJOHGSBNFXPSLT w ʮ(Pͬͯɺ\\೚ҙͷݴޠ໊^^Ͱ͍͏ͱ͜Ζ\\ͦͷݴޠͷ୅දత ͳςετϑϨʔϜϫʔΫ໊^^ͬͯͳΜ͔ͳ͍ΜͰ͔͢ʁʯ w "1*ϑϨʔϜϫʔΫͰ΋ಉٞ͡࿦͕͋Δͱࢥ͍·͕͢ʜ w ςετϑϨʔϜϫʔΫͷੋඇ w ଞͷਓ͕ແݶʹޠ͍ͬͯΔͷͰলུ

    w ʮͨͩͷ%4-ʯ w ʮίϯςΩετʹ͋ͬͨϝοηʔδදࣔʯ w ʮUFTUJOHͰඞཁे෼ʯ w ʮϝϯςอূʯ w ʮπʔϧؒͷ࿈ܞͷऔΓ΍͢͞ʯ
  37. 5FTUJOHGSBNFXPSLT w ͜Ε͘Β͍ͳΒೖΕͯ΋Α͘ͳ͍ʁͱ͍͏ύοέʔδ w HJUIVCDPNHPPHMFHPDNQ w HJUIVCDPNTUSFUDISUFTUJGZ w 5BCMF%SJWFO5FTUͰͪΌΜͱςετέʔε໊ॻ͍͓͚ͯ͹
 ࠔΔ͜ͱ΋গͳ͍ͷͰผʹ͍Βͳ͍͔΋

  38. 5FTUJOHGSBNFXPSLT w ͜Ε͘Β͍ͳΒೖΕͯ΋Α͘ͳ͍ʁͱ͍͏ύοέʔδ w HJUIVCDPNHPPHMFHPDNQ w HJUIVCDPNTUSFUDISUFTUJGZ w 5BCMF%SJWFO5FTUͰͪΌΜͱςετέʔε໊ॻ͍͓͚ͯ͹
 ࠔΔ͜ͱ΋গͳ͍ͷͰผʹ͍Βͳ͍͔΋

    w ݸਓతʹೖΕͳ͍ύοέʔδ w ඞཁे෼ͳ͸ͣͷUFTUJOHύοέʔδͷϥούʔ w HPUFTUUPPMT w (P$POWFZ w (PCMJO
  39. ΠϯςάϨʔγϣϯςετͷ࿩

  40. ΠϯςάϨʔγϣϯςετʹඞཁͳ͜ͱ w ࣮ߦ؀ڥ w %# DBDIF w 'JYUVSF w ࣌ࠁɾཚ਺ݻఆ

    w DPOUFYU಺ม਺ w ֎෦"1*ͷ.PDL w "1*SFRSFTͷݕূ
  41. ࣮ߦ؀ڥͷߏங w %#ɺDBDIFΛͲͷΑ͏ʹཱͯΔ͔ w .PDL͢Δ w σʔϞϯ࣮ߦ w EPDLFSίϯςφΛཱͯΔ

  42. %#पΓͰඞཁͳ࡞ۀ w ςετ࣮ߦ͝ͱʹҎԼͷϑϩʔΛ౿Ή  ίωΫγϣϯཱ֬  ςʔϒϧ࡞੒  Ϛελσʔλద༻ 

    ςετ࣮ߦ  ςʔϒϧഁغ  ίωΫγϣϯ੾அ
  43. %#Λ.PDL͢Δͷ͸ྑ͍͔ʁ w ͋·ΓϕλʔͰ͸ͳ͍ͱࢥ͏ w 42-จ͕ؒҧ͍ͬͯΔ͔Ͳ͏͔͸ίϯύΠϧ࣌ʹ ؾ͚ͮͳ͍ w αʔυύʔςΟ"1*ͳΒ·ͩ͠΋ɺ%#ͳΒࣗ෼Ͱ ؀ڥ͕༻ҙͯ͠ɺҙਤ௨Γ͔Ͳ͏͔ͷݕূ͕ Ͱ͖Δͷ͔ͩΒɺ.PDL͠ͳ͍ํ͕ྑ͍

  44. σʔϞϯ࣮ߦ w HJUIVCDPNMFTUSSBUHPUFTUNZTRME w Կ΋ߟ͑ͳͯ͘΋NZTRME͕࣮ߦͰ͖Δ

  45. ίϯςφ w (PͰ%PDLFSʹ઀ଓ͢Δϥούʔ w HJUIVCDPNGTPV[BHPEPDLFSDMJFOU w HJUIVCDPNPSZEPDLFSUFTU w ςετͷͨΊʹ.Z42-΍3FEJT઀ଓ͕Ͱ͖Δ
 ྗڧ͍ϥούʔ

    w ࣗલͰEPDLFSίϯςφͨͯΔ࣌ʹඞཁͳ
 ىಈ֬ೝऔΕΔ·Ͱͷ1JOHͳͲΛ΍ͬͯ͘ΕΔ
  46. ίϯςφ

  47. γϯϓϧͳ઀ଓ %#ͷίωΫγϣϯͳͲɺ DMPTFͷॲཧ͕ඞཁͳ΋ ͷ͸ɺ UFBSEPXO༻ͷGVODΛฦ ٫͓͍ͯͯ͠ɺ ࢀর͍ͯ͠Δؔ਺಺Ͱ EFGFSͰ࣮ߦ͢Δͱ
 ҆શɻ

  48. 'JYUVSF w ϢχοτςετͱҟͳΓ༻్͕͍͔ͭ͋͘Δ w SFRSFTݕূ༻ͷQBZMPBE w ࣄલʹ%#ʹೖΕ͓ͯͨ͘Ίͷσʔλ w ڞ௨ͷϚελσʔλ w

    ݸผͷςετ༻ʹ༻ҙ͞Εͨσʔλ
  49. SFRSFTݕূ༻ͷQBZMPBE w JOQVUHPMEFOͰQBZMPBEΛ+40/ʹ·ͱΊ͓ͯ͘ w ΫΤϦύϥϝʔλʔ΋ඞཁͳΒ੾Γग़͓ͯ͘͠

  50. ςʔϒϧ࡞੒ɾ࡟আ w ςʔϒϧఆ͕ٛ͹Βͭ͘ͱ໘౗ͳͷͰɺ
 HJUIVCDPNLLVCVOTRMEFGΛ࢖ͬͯ
 ҰݸͷεΩʔϚʹ࠷৽ͷঢ়ଶΛ·ͱΊ͓ͯ͘ͱศར

  51. ςʔϒϧ࡞੒ɾ࡟আ

  52. None
  53. Ϛελσʔλςετ͝ͱͷσʔλ w ݸਓతʹ͸ҎԼͷΑ͏ʹɺϚελσʔλͱͦΕҎ֎ Λ෼͚͍ͯΔ w UFTUEBUBpYUVSFTEFGBVMU w Ϛελσʔλ w UFTUEBUBpYUVSFTPQUJPOBM

    w ςετέʔεʹΑͬͯࢀরͨ͠Γ͠ͳ͔ͬͨΓ͢ Δσʔλ
  54. σʔλ࡞੒

  55. σʔλ࡞੒

  56. ಛघͳσʔλૠೖ w .Z42- 1PTHSF42-ͳͲͷσʔλૠೖ͸ָ w ("&Λ࢖ͬͯΔͱ%BUBTUPSFʹ
 'JYUVSFΛೖΕͨ͘ͳΔ

  57. None
  58. ETNPDL w 'JYUVSFͷ:".-ఆٛΛࢦఆ͢Ε͹ɺࢦఆͷ,JOEͷ σʔλΛྲྀ͠ࠐΊΔ w $MFBOVQ࡞ۀ͸ผ్ඞཁ

  59. ࣌ࠁɾཚ਺ݻఆ w ௨ৗͷςετͱಉ༷ɻϞοΫ༻ͷؔ਺Λఆٛͯ͠ɺ Ϧηοτ༻ͷؔ਺ΛSFUVSOͯ͠΋ྑ͍ɻ

  60. $POUFYU಺ม਺ w DPOUFYU಺෦ͷ஋Λ࢖ͬͯॲཧ͢Δ৔߹ɺUFTU༻ͷDPOUFYUʹ஋ ΛೖΕ͓ͯ͘ඞཁ͕͋Δ w ଟ෼օ͞Μ͕಺෦Ͱఆ͍ٛͯ͠Δ/FX$POUFYU8JUI999ͳϝ ιουΛݺͿͷ΋ྑ͍͕ɺͪΌΜͱϦΫΤετͱͯ͠
 ݕূ͢ΔͳΒͤΊͯSFRʹ஋Λૠೖ͓͖͍ͯͨ͠ɻ

  61. ֎෦"1*ͷ.PDL w ֎෦"1*͸΋͏Ͳ͏͠Α͏΋ͳ͍ͷͰ.PDL͢Δ w NPDLೖΕͯΔͷʹ࢖ͬͯͳ͍ͱΤϥʔͰऴྃ͢Δ ͷͰɺNPDL͚ͩ͸ॲཧΛڞ௨Խͤͣ ɺݸผͷςε τέʔεͰૠೖ͢Δɻ

  62. .PDLͷίϯτϩʔϥʔੜ੒

  63. .PDLར༻

  64. "1*SFRSFTͷݕূ w HPMBOHHP΍BQQFOHJOFͷެࣜύοέʔδʹ౓ʑ
 AUSZAͱ͍͏ϥούʔ͕͋Δɻ w ϦΫΤετݕূ΍ςετͷग़ྗ݁ՌͳͲͷݕূ͸
 AUSZAͱ͍͏ஆ͔͍ؔ਺͕΍ͬͯ͘Εͯͯɺ
 ඇৗʹ࣮૷ͷࢀߟʹͳΔ

  65. SFRSFTΛݕূ͢Δ৔߹ʜ

  66. None
  67. None
  68. ؆ૉ☺

  69. ͓·͚

  70. 5FTU3VOOFSࣗମͷϥούʔ w ΠϯςάϨʔγϣϯςετͰ΍Δ͜ͱ͸
 ͍͍ܾͩͨ·ͬͯΔ w UFTUJOH.Λड͚औΔؔ਺Ͱϥοϓͯ͋͛͠Δͱ
 εοΩϦ͢Δ

  71. None
  72. ·ͱΊ w ۃྗ"1*ͷςετ͸ϢχοτςετͰϩδοΫΛ୲อͰ͖ΔΑ ͏ʹɺ࣮૷Λߏ଄ମۙ͘ʹدͤΔ w ΠϯςάϨʔγϣϯςετͷϊ΢ϋ΢͸·ͩ·ͩΦʔϓϯ͡Ό ͳ͍͚Ͳɺެࣜύοέʔδͷஆ͔͍ςετ͕ඇৗʹࢀߟʹͳΔ w γϯϓϧ͞ΛอͪͭͭɺͲ͜·Ͱڞ௨ԽͰ͖Δ͔͕୉ޣຯͳͷ ͰɺͦΕΛָ͠Έ·͠ΐ͏

  73. ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ