<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>Vo Phuong, Author at Tomoshare</title>
	<atom:link href="https://blog.tomosia.com.vn/author/vophuong/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.tomosia.com.vn/author/vophuong/</link>
	<description>Kênh chia sẻ kiến thức Tomosia Việt Nam</description>
	<lastBuildDate>Thu, 21 Dec 2023 01:41:33 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://blog.tomosia.com.vn/wp-content/uploads/2023/09/cropped-icon-32x32.png</url>
	<title>Vo Phuong, Author at Tomoshare</title>
	<link>https://blog.tomosia.com.vn/author/vophuong/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Xây dựng đoạn code capture screen bằng Python</title>
		<link>https://blog.tomosia.com.vn/xay-dung-doan-code-capture-screen-bang-python/</link>
					<comments>https://blog.tomosia.com.vn/xay-dung-doan-code-capture-screen-bang-python/#comments</comments>
		
		<dc:creator><![CDATA[Vo Phuong]]></dc:creator>
		<pubDate>Thu, 21 Dec 2023 01:41:32 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=2785</guid>

					<description><![CDATA[<p>Lâu lâu bị người khác mượn máy thì chúng ta sẽ không biết họ sẽ truy cập và&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/xay-dung-doan-code-capture-screen-bang-python/">Xây dựng đoạn code capture screen bằng Python</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Lâu lâu bị người khác mượn máy thì chúng ta sẽ không biết họ sẽ truy cập và vào những gì của chúng ta. Nay mình sẽ hướng dẫn tạo 1 đoạn code nho nhỏ để hỗ trợ bạn capture screen để tracking lại hành động của người khác</p>



<p class="wp-block-paragraph">Đầu tiên bạn cần cài đặt thư viện <a href="https://pypi.org/project/PyAutoGUI/">PyAutoGUI</a>. Đây là thư viện cross platform nhằm mục đích xây dựng giao diện trên các HĐH như MacOS, WindowOS và Ubuntu</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="pip install PyAutoGUI" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">pip</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">install</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">PyAutoGUI</span></span></code></pre></div>



<p class="wp-block-paragraph">Dưới đây là đoạn code dùng để mô tả các chức năng dùng để phục vụ việc capture screen</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Python</span><span role="button" tabindex="0" data-code="import pyautogui
import time
from datetime import datetime

def create_file_name():
    now = datetime.now()
    date_time = now.strftime(&quot;%Y%m%d-%H%M%S&quot;)
    return f'screen_shot/{date_time}.png'

def capture_screen():
    file_name = create_file_name()
    screen_shot = pyautogui.screenshot()
    screen_shot.save(file_name)

def main():
    while True:
        capture_screen()
        time.sleep(1)

if __name__ == &quot;__main__&quot;:
    main()
" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> pyautogui</span></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> time</span></span>
<span class="line"><span style="color: #F286C4">from</span><span style="color: #F6F6F4"> datetime </span><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> datetime</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">def</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">create_file_name</span><span style="color: #F6F6F4">():</span></span>
<span class="line"><span style="color: #F6F6F4">    now </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> datetime.now()</span></span>
<span class="line"><span style="color: #F6F6F4">    date_time </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> now.strftime(</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">%Y%m</span><span style="color: #BF9EEE">%d</span><span style="color: #E7EE98">-%H%M%S</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">return</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">f</span><span style="color: #E7EE98">&#39;screen_shot/</span><span style="color: #BF9EEE">{</span><span style="color: #F6F6F4">date_time</span><span style="color: #BF9EEE">}</span><span style="color: #E7EE98">.png&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">def</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">capture_screen</span><span style="color: #F6F6F4">():</span></span>
<span class="line"><span style="color: #F6F6F4">    file_name </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> create_file_name()</span></span>
<span class="line"><span style="color: #F6F6F4">    screen_shot </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> pyautogui.screenshot()</span></span>
<span class="line"><span style="color: #F6F6F4">    screen_shot.save(file_name)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">def</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">main</span><span style="color: #F6F6F4">():</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">while</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">True</span><span style="color: #F6F6F4">:</span></span>
<span class="line"><span style="color: #F6F6F4">        capture_screen()</span></span>
<span class="line"><span style="color: #F6F6F4">        time.sleep(</span><span style="color: #BF9EEE">1</span><span style="color: #F6F6F4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">if</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">__name__</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">==</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">__main__</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">:</span></span>
<span class="line"><span style="color: #F6F6F4">    main()</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Với đoạn code bên trên thì mỗi 1s thì nó sẽ tự động capture screen 1 lần và lưu vào thư mục <code>screen_shot</code>. Bạn có thể thay đổi lại thời gian để phù hợp với mục đích của mình. </p>



<p class="wp-block-paragraph">Trong thư viện <a href="https://pypi.org/project/PyAutoGUI/">PyAutoGUI</a> có khá là nhiều function hỗ trợ cho việc tương tác với mouse và keyboard. Bạn có thể sử dụng nó để xây dựng các ứng dụng keylogger cơ bản 😀<br><br></p>
<p>The post <a href="https://blog.tomosia.com.vn/xay-dung-doan-code-capture-screen-bang-python/">Xây dựng đoạn code capture screen bằng Python</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/xay-dung-doan-code-capture-screen-bang-python/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Cài đặt môi trường ảo cho Python bằng virtualenvwrapper</title>
		<link>https://blog.tomosia.com.vn/cai-dat-moi-truong-ao-cho-python-bang-virtualenvwrapper/</link>
					<comments>https://blog.tomosia.com.vn/cai-dat-moi-truong-ao-cho-python-bang-virtualenvwrapper/#comments</comments>
		
		<dc:creator><![CDATA[Vo Phuong]]></dc:creator>
		<pubDate>Wed, 29 Nov 2023 09:25:35 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=2127</guid>

					<description><![CDATA[<p>Xin chào tất cả mọi người, việc cài đặt các môi trường và thư viện trong Python sẽ&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/cai-dat-moi-truong-ao-cho-python-bang-virtualenvwrapper/">Cài đặt môi trường ảo cho Python bằng virtualenvwrapper</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Xin chào tất cả mọi người, việc cài đặt các môi trường và thư viện trong Python sẽ thường khó khăn và rắc rối nếu dùng chung với môi trường Python của máy. Mình viết bài blog này để giúp các bạn giải quyết việc này 1 cách nhanh chóng và hiệu quả nhất</p>



<p class="wp-block-paragraph">Mình xin giới thiệu đến môi trường ảo dành cho Python tên là virtualenvwrapper. Các bạn có thể xem về nó tại <a href="https://virtualenvwrapper.readthedocs.io/en/latest/">đây</a></p>



<p class="wp-block-paragraph"><strong>1. Đầu tiên cài đặt virtualenvwrapper</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="pip install virtualenvwrapper" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">pip</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">install</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">virtualenvwrapper</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong>2. Cài đặt thư mục lưu trữ các environment của Python</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="// Set đường dẫn sẽ ch các Environment
export WORKON_HOME=~/Environment

// Khởi tạo thư mục chưá Environment, nếu có rồi thì có thể bỏ qua bước này
mkdir -p $WORKON_HOME

// Thêm command line virtualenvwrapper
source /usr/local/bin/virtualenvwrapper.sh
" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">//</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Set</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">đường</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dẫn</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">sẽ</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ch</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">các</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Environment</span></span>
<span class="line"><span style="color: #F286C4">export</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">WORKON_HOME</span><span style="color: #F286C4">=</span><span style="color: #E7EE98">~/Environment</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">//</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Khởi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">tạo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">thư</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mục</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">chưá</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Environment,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">nếu</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">có</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">rồi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">thì</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">có</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">thể</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">bỏ</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">qua</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">bước</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">này</span></span>
<span class="line"><span style="color: #62E884">mkdir</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-p</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">$WORKON_HOME</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">//</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Thêm</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">command</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">line</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">virtualenvwrapper</span></span>
<span class="line"><span style="color: #97E1F1">source</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/usr/local/bin/virtualenvwrapper.sh</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph"><strong>3. Khởi tạo môi trường ảo</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="// Khởi tạo môi trường ảo với python version mặc định của máy, 
// env_name -&gt; Tên môi trường, có thể đặt các tên khác để có thể dễ ghi nhớ và phù hợp với dự án
mkvirtualenv env_name

// Khởi tạo môi trường với việc định python version
// python3.x -&gt; Python version
// env_name -&gt; Tên môi trường, có thể đặt các tên khác để có thể dễ ghi nhớ và phù hợp với dự án
mkvirtualenv -p python3.x env_name" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">//</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Khởi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">tạo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">môi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">trường</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ảo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">với</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">python</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">version</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mặc</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">định</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">của</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">máy,</span><span style="color: #F6F6F4"> </span></span>
<span class="line"><span style="color: #62E884">//</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">env_name</span><span style="color: #F6F6F4"> -</span><span style="color: #F286C4">&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Tên</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">môi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">trường,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">có</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">thể</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">đặt</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">các</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">tên</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">khác</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">để</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">có</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">thể</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dễ</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ghi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">nhớ</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">và</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">phù</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">hợp</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">với</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dự</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">án</span></span>
<span class="line"><span style="color: #62E884">mkvirtualenv</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">env_name</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">//</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Khởi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">tạo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">môi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">trường</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">với</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">việc</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">định</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">python</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">version</span></span>
<span class="line"><span style="color: #62E884">//</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">python3.x</span><span style="color: #F6F6F4"> -</span><span style="color: #F286C4">&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Python</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">version</span></span>
<span class="line"><span style="color: #62E884">//</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">env_name</span><span style="color: #F6F6F4"> -</span><span style="color: #F286C4">&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Tên</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">môi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">trường,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">có</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">thể</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">đặt</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">các</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">tên</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">khác</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">để</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">có</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">thể</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dễ</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ghi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">nhớ</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">và</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">phù</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">hợp</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">với</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dự</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">án</span></span>
<span class="line"><span style="color: #62E884">mkvirtualenv</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-p</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">python3.x</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">env_name</span></span></code></pre></div>



<p class="wp-block-paragraph">Đây là minh hoạ khi chạy lệnh khởi tạo môi trường ảo</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="327" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-29-at-16.16.58-1024x327.png" alt="" class="wp-image-2128" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-29-at-16.16.58-1024x327.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-29-at-16.16.58-300x96.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-29-at-16.16.58-768x245.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-29-at-16.16.58-1536x490.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-29-at-16.16.58-380x121.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-29-at-16.16.58-800x255.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-29-at-16.16.58-1160x370.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-29-at-16.16.58.png 1568w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>4. Các lệnh về khởi động và thoát môi trường ảo</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="// Hiện thị danh sách các môi trường ảo trong máy
workon

// Khởi chạy môi trường ảo
workon env_name

// Thoát khỏi môi trường ảo
deactivate" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">//</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Hiện</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">thị</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">danh</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">sách</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">các</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">môi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">trường</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ảo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">trong</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">máy</span></span>
<span class="line"><span style="color: #62E884">workon</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">//</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Khởi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">chạy</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">môi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">trường</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ảo</span></span>
<span class="line"><span style="color: #62E884">workon</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">env_name</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">//</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Thoát</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">khỏi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">môi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">trường</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ảo</span></span>
<span class="line"><span style="color: #62E884">deactivate</span></span></code></pre></div>



<p class="wp-block-paragraph">*Lưu ý khi đã nằm trong môi trường ảo thì các thư viện được cài đặt liên quan đến python sẽ nằm trong thư mục với định dạng như bên dưới và sẽ không ảnh hưởng đến thư viện nằm trên máy</p>



<pre class="wp-block-code"><code>~/Environment/&#91;env_name]/lib/&#91;python3.x]/site-packages</code></pre>



<p class="wp-block-paragraph">Trên đây là các cách cài đặt môi trường ảo cho Python. Như các bạn thấy thật đơn giản nhưng hi vọng nó sẽ giúp ích cho các bạn trong quá trình học tập và làm quen với Python</p>
<p>The post <a href="https://blog.tomosia.com.vn/cai-dat-moi-truong-ao-cho-python-bang-virtualenvwrapper/">Cài đặt môi trường ảo cho Python bằng virtualenvwrapper</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/cai-dat-moi-truong-ao-cho-python-bang-virtualenvwrapper/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Automation Test for iOS (part 1)</title>
		<link>https://blog.tomosia.com.vn/automation-test-for-ios-part-1/</link>
					<comments>https://blog.tomosia.com.vn/automation-test-for-ios-part-1/#comments</comments>
		
		<dc:creator><![CDATA[Vo Phuong]]></dc:creator>
		<pubDate>Tue, 03 Oct 2023 07:16:09 +0000</pubDate>
				<category><![CDATA[IOS]]></category>
		<category><![CDATA[Automation Test]]></category>
		<category><![CDATA[KIF]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=299</guid>

					<description><![CDATA[<p>Đối với công việc lâp trình phần mềm thì Unit Test và UI Test là những việc vô&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/automation-test-for-ios-part-1/">Automation Test for iOS (part 1)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Đối với công việc lâp trình phần mềm thì Unit Test và UI Test là những việc vô cùng quan trọng trong việc bảo đảm 1 phần mềm đạt chất lượng tốt. Bài viết này, mình chỉ tập trung chủ yếu vào UI Test. Với lập trình viên iOS thì việc viết UI Test đã có sự support từ Apple với XCTest framework. Nhưng sau khi làm thử với XCTest framework thì thấy nó khó cho việc viết UITest cho chúng ta. Nên mình đã tìm hiểu được 1 framework cho việc viết UITest là <a href="https://github.com/kif-framework/KIF"><strong>KIF framewok</strong></a></p>



<h2 id="1-cai-dat-kif" class="wp-block-heading">1. Cài đặt KIF</h2>



<p class="wp-block-paragraph">Điều đầu tiên, để sử dụng được KIF thì chúng ta cần tạo target cho việc test của chúng ta. Ở đây, KIF không sử dụng&nbsp;<strong>iOS UI Testing Bundle</strong>&nbsp;mà sử dụng&nbsp;<strong>iOS Unit Testing Bundle</strong>.Nên trong trường hợp bạn nào đã có unit test ở trong project thì cần chọn 1 trong 2 target để chạy test.</p>



<p class="wp-block-paragraph">Chọn dự án của bạn trong Xcode và nhấp vào &#8220;Add Target&#8221; ở góc dưới bên trái của trình soạn thảo. Chọn iOS -&gt; Test -&gt; iOS Unit Testing Bundle. Hãy cung cấp cho nó một tên như &#8220;Acceptance Tests&#8221;, &#8220;UI Tests&#8221;, hoặc cái gì đó cho thấy ý định của quá trình test của bạn.</p>



<p class="wp-block-paragraph">Acceptance Test Target của bạn được tạo và sẽ có thêm 1 file đi cùng với nó, ex: &#8220;Acceptance_Tests.swift&#8221; khớp với tên target. Hãy xoá nó đi.</p>



<h3 id="1-1-cai-dat-voi-pod" class="wp-block-heading">1.1 Cài đặt với Pod</h3>



<p class="wp-block-paragraph">Khi Test Target của bạn đã được thiết lập, thêm đoạn mã dưới đây vào Podfile của bạn. Sử dụng đúng target cần cài đặt KIF</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="target 'Your Apps' do
  ...
end

target 'Acceptance Tests' do
  pod 'KIF', :configurations =&gt; ['Debug']
end" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">target &#39;Your Apps&#39; </span><span style="color: #FF79C6">do</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6">...</span></span>
<span class="line"><span style="color: #F8F8F2">end</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">target &#39;Acceptance Tests&#39; </span><span style="color: #FF79C6">do</span></span>
<span class="line"><span style="color: #F8F8F2">  pod &#39;KIF&#39;, </span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2">configurations </span><span style="color: #FF79C6">=&gt;</span><span style="color: #F8F8F2"> [&#39;Debug&#39;]</span></span>
<span class="line"><span style="color: #F8F8F2">end</span></span></code></pre></div>



<p class="wp-block-paragraph">Sau khi chạy <code>pod install</code> thì công việc tiếp theo là làm theo <strong>Cấu hình Test Target</strong> ở bên dưới để cấu hình thích hợp cho nó</p>



<h3 id="1-2-cai-voi-static-library" class="wp-block-heading">1.2 Cài với static library</h3>



<p class="wp-block-paragraph">Để cài đặt KIF, bạn cần liên kết static library libKIF trực tiếp vào ứng dụng của bạn. Tải xuống nguồn từ&nbsp;<a href="https://github.com/kif-framework/KIF">KIF</a>&nbsp;và làm theo hướng dẫn dưới đây.</p>



<p class="wp-block-paragraph">Chúng tôi sẽ sử dụng một dự án đơn giản làm ví dụ và bạn có thể tìm thấy nó trong Documentation/Examples/Testable Swift trong reposity của KIF.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="825" height="453" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-1.png" alt="" class="wp-image-300" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-1.png 825w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-1-300x165.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-1-768x422.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-1-380x209.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-1-800x439.png 800w" sizes="(max-width: 825px) 100vw, 825px" /></figure>



<h4 id="them-kif-vao-du-an" class="wp-block-heading">Thêm KIF vào dự án</h4>



<p class="wp-block-paragraph">Bước đầu tiên là thêm dự án KIF vào thư mục con của ./Frameworks/KIF của dự án. Nếu dự án của bạn sử dụng Git để kiểm soát phiên bản, bạn có thể sử dụng submodules để cập nhật trong tương lai dễ dàng hơn:</p>



<pre class="wp-block-preformatted">cd /path/to/MyApplicationSource
mkdir Frameworks
git submodule add https://github.com/kif-framework/KIF.git Frameworks/KIF</pre>



<h4 id="them-kif-vao-workspace" class="wp-block-heading">Thêm KIF vào Workspace</h4>



<p class="wp-block-paragraph">Hãy để dự án của bạn biết về KIF bằng cách thêm dự án KIF vào không gian làm việc cùng với dự án chính của bạn. Tìm KIF.xcodeproj trong Finder và kéo nó vào Project Navigator (⌘1).</p>



<figure class="wp-block-image size-full"><img decoding="async" width="825" height="453" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-2.png" alt="" class="wp-image-301" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-2.png 825w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-2-300x165.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-2-768x422.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-2-380x209.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-2-800x439.png 800w" sizes="(max-width: 825px) 100vw, 825px" /></figure>



<h3 id="1-3-cau-hinh-test-target" class="wp-block-heading">1.3 Cấu hình Test Target</h3>



<p class="wp-block-paragraph">Bây giờ, bạn đã có test target cho việc viết UI Test của bạn. Tiếp theo là thêm các thư viện cần thiết cho dự án, chúng ta chọn trong <strong>Project Navigator</strong> và vào Test Target mà bạn đã tạo ra, chọn tab <strong>&#8220;Build Phases&#8221;</strong>. Trong phần <strong>&#8220;Link Binary With Libraries&#8221;</strong>, hãy nhấn nút &#8220;+&#8221;. Trong bảng xuất hiện, chọn &#8220;libKIF.a&#8221; và nhấp vào <strong>&#8220;Add&#8221;</strong>. Lặp lại quá trình cho <strong>CoreGraphics.framework</strong> và <strong>QuartzCore.framework</strong> . KIF yêu cầu IOKit.framework, nhưng nó không nằm trong các khuôn khổ hệ thống. Để liên kết đến nó, thêm &#8220;-framework IOKit&#8221; vào <strong>&#8220;Other Linker Flags&#8221;</strong>.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-3.png" alt="" class="wp-image-302" style="width:679px;height:373px" width="679" height="373" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-3.png 825w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-3-300x165.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-3-768x422.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-3-380x209.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-3-800x439.png 800w" sizes="auto, (max-width: 679px) 100vw, 679px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="825" height="453" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-4.png" alt="" class="wp-image-303" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-4.png 825w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-4-300x165.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-4-768x422.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-4-380x209.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-4-800x439.png 800w" sizes="auto, (max-width: 825px) 100vw, 825px" /></figure>



<p class="wp-block-paragraph">KIF được viết bằng Objective C nên các bạn cần thêm <code>-ObjC</code> vào <strong>&#8220;Other Linker Flags&#8221;</strong> trong Build Settings của Test Target</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="825" height="453" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-5.png" alt="" class="wp-image-304" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-5.png 825w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-5-300x165.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-5-768x422.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-5-380x209.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-5-800x439.png 800w" sizes="auto, (max-width: 825px) 100vw, 825px" /></figure>



<p class="wp-block-paragraph">Ở phần này mình chỉ giới thiệu về việc thêm KIF framework vào dự án của chúng. Ở phần sau mình sẽ demo về KIF framework</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://blog.tomosia.com.vn/automation-test-for-ios-part-1/">Automation Test for iOS (part 1)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/automation-test-for-ios-part-1/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
	</channel>
</rss>
